Mạng cầu nối KVM không hoạt động


23

Tôi vừa cài đặt KVM trên Máy chủ Ubuntu của mình theo hướng dẫn sau: https://help.ubfox.com/community/KVM/Installation

Sau đó, chuẩn bị một mạng cầu nối như được hiển thị ở đây: https://help.ubfox.com/community/KVM/Networking

Sau đó, tôi tạo ra một máy ảo với virt-manager. Tôi đã thử nhiều lần nhưng khách không kết nối được với mạng! Có ai giúp đỡ không?

ifconfig:

      br0       Link encap:Ethernet  HWaddr d0:27:88:b0:e4:38  
                inet addr:192.168.20.100  Bcast:192.168.20.255  Mask:255.255.255.0
                inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:62 errors:0 dropped:0 overruns:0 frame:0
                TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:10493 (10.4 KB)  TX bytes:8433 (8.4 KB)

      eth0      Link encap:Ethernet  HWaddr d0:27:88:b0:e4:38  
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:62 errors:0 dropped:0 overruns:0 frame:0
                TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000 
                RX bytes:11361 (11.3 KB)  TX bytes:8479 (8.4 KB)
                Interrupt:41 

      lo        Link encap:Local Loopback  
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      virbr0    Link encap:Ethernet  HWaddr 5a:8c:57:95:af:3b  
                inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

chương trình brctl:

 bridge name    bridge id      STP enabled    interfaces
 br0       8000.d02788b0e438   no        eth0
 virbr0         8000.000000000000   yes  

brctl showmacs br0:

 port no   mac addr       is local? ageing timer
   1  5c:d9:98:67:b6:28   no          48.33
   1  d0:27:88:b0:e4:38   yes          0.00
   1  e0:2a:82:f9:6c:09   no           0.00

lộ trình ip:

 default via 192.168.20.1 dev br0  metric 100 
 192.168.20.0/24 dev br0  proto kernel  scope link  src 192.168.20.100 
 192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

* Trong khách * Tôi không thể sao chép dán thông tin từ khách vì không thể ssh vào đó. Nó không nhận được bất kỳ ip nào từ DHCP. Không hoạt động ngay cả sau khi thiết lập thủ công.


Tôi có thể đề nghị bạn cung cấp đầu ra từ các lệnh sau không? Trên máy chủ: ifconfig, brctl show, brctl showmacs br0, và ip route. Trên khách: ifconfig, ip route, ping 8.8.8.8, ping <your internet router>, và traceroute 8.8.8.8. Tôi không thể nói rằng tôi đã cấu hình kvm theo cách bạn có, nhưng tôi đã nhận được cầu nối để làm việc bằng cách sử dụng kvmlệnh. Tôi đã phải ngắt kết nối không dây để máy chủ của tôi sẽ kết nối với Internet và, như các hướng dẫn bạn đã nói, bạn cần kết nối Internet với Ethernet.
John S Gruber

@JohnSGruber Chỉ cần thêm thông tin bạn yêu cầu. Nhưng tôi không thể sao chép dán thông tin từ khách vì không thể ssh vào đó. Nó không nhận được bất kỳ ip nào từ DHCP. Không hoạt động ngay cả sau khi thiết lập thủ công.
THpub

Là địa chỉ MAC bạn đã gán cho khách trong brctl showmacs br0danh sách trên?
John S Gruber

Tôi đã không thêm mac thủ công .. nhưng hãy để tôi kiểm tra mac mà nó đã nhận ..
THpub

@JohnSGruber Không tôi không thấy MAC ở đây!
THpub

Câu trả lời:


22

Sơ bộ

Điều này sau đây làm việc cho tôi cho Ubuntu 12.04. Bạn nên vô hiệu hóa tường lửa máy tính của mình khi bạn kiểm tra điều này để nó không can thiệp.

Tệp / etc / default / qemu-kvm phải được cài đặt ban đầu.

Bạn sẽ cần phải có cầu nối qemu-kvmlibvirt-binCài đặt cầu-dụng cụ Cài đặt qemu-kvmCài đặt libvirt-bin cài đặt . Bất kỳ người dùng sử dụng máy ảo nào cũng nên được thêm vào nhóm libvirtd.

Dường như không còn cần phải thêm khả năng CAP_NET_ADMIN.

Thiết lập mạng

Chế độ mạng mặc định là chế độ Người dùng, còn được gọi là SLIRP. Nó sử dụng một cầu virbr0 được xác định trước được NAT định tuyến đến máy tính khách. Định tuyến NAT sử dụng tính năng ip_forwarding và iptables của kernel . Chế độ cầu sử dụng một cây cầu ảo trong máy khách mà giao diện Ethernet (không bị đánh số) kết nối và trên đó cả máy chủ và máy khách đều có giao diện mạng của chúng.

Các sơ đồ sau đây có thể làm cho sự khác biệt rõ ràng hơn:

Sơ đồ mạng

Bạn có thể xem mạng Người dùng mặc định được xác định như thế nào với:

virsh net-dumpxml default

Tôi có thể thiết lập chế độ bắc cầu bằng các phương pháp sau:

Trong / etc / mạng / giao diện (từ phần bắc cầu của bài đăng bạn đề cập trong câu hỏi của bạn):

tự động lo
iface lo inet loopback
#auto eth0
#iface eth0 in dhcp
tự động eth0
hướng dẫn sử dụng iface eth0 inet
tự động br0
iface br0 inet dhcp
    cầu_ports eth0
    cầu_stp tắt
    cầu_fd 0
    cầu_max chờ 0

Khởi động lại; và đảm bảo rằng mạng không dây không hoạt động. Kiểm tra tuyến IP mặc định với ip route. Nó phải được sử dụng giao diện br0.

NB Nếu Ethernet của bạn không được kết nối khi thay đổi này được thực hiện, bạn cần phải cắm cáp Ethernet của mình và nhận một nhà mạng hoặc khởi động sẽ bị treo trong hai phút và bạn sẽ không có khả năng mạng Đó là vì giao diện eth0, bởi trong tập tin này, phải xuất hiện trước khi khởi động có thể tiến hành bình thường.

NB Nói chung, bạn không thể sử dụng mạng không dây thay vì eth0 vì không thể sử dụng nhiều địa chỉ MAC (tôi suy luận rằng họ cần một mạng thứ hai cho cầu nối).

Để thay thế, bạn có thể vô hiệu hóa việc sử dụng Ethernet và đảm bảo rằng nó không có địa chỉ IP và không có tuyến đường mặc định được thiết lập ip route. Sau đó:

 sudo ifconfig eth0 0.0.0.0 up
 sudo brctl addbr br0
 sudo brctl addif br0 eth0
 sudo ifconfig br0 up
 sudo dhclient br0 &

Bạn cũng có thể cung cấp địa chỉ IP tĩnh tại đây, cũng như xác định tuyến đường và địa chỉ DNS mặc định. Đối với ví dụ dhclientnày làm điều này.

Đây là bảng lộ trình của tôi:

$ ip danh sách tuyến đường
mặc định thông qua 192.168.1.1 dev br0 metric 100 
169.254.0.0/16 dev br0 phạm vi liên kết phạm vi 1000 
192.168.1.0/24 dev br0 proto kernel phạm vi liên kết src 192.168.1.45 
Liên kết phạm vi hạt nhân proto 192.168.122.0/24 dev virbr0 src 192.168.122.1

Sử dụng kvm

Sau đó tôi có thể khởi động một máy kvm bắc cầu bằng:

 $ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0

Các -netdev taplàm cho thông số sudo một yêu cầu. Khi VM được khởi động, qemu-kvm chạy các lệnh sau:

ifconfig vnet0 0.0.0.0 trở lên
brctl addif brctl addif br0 vnet0

Điều này được thực hiện bởi / etc / qemu-ifup

Giao diện vnet0 của VM được thêm vào cầu br0 vì tuyến mặc định ở trên sử dụng giao diện cầu đó. Nếu không có giao diện tap thay vào đó sẽ được thêm vào giao diện virbr0. Vì không được kết nối với Internet, NAT sẽ được sử dụng để kết nối khách với máy chủ và Internet, trong các thí nghiệm của tôi. Bạn có thể hướng vnet0 đến một cây cầu cụ thể trong / etc / default / qemu-kvm. Sử dụng virt-manager bên dưới, bạn có thể chỉ dẫn rõ ràng cầu nối nào.

Do các lệnh trên do qemu-kvm và -netdev tap,id=tunnel,ifname=vnet0tham số đưa ra, máy ảo vm được kết nối với đường hầm vnet0 và đường hầm được kết nối với cầu br0.

Bây giờ tôi có thể trực tiếp ssh vào máy khách VM này từ một máy tính khác trong mạng của tôi.

Máy chủ của tôi ifconfig(lưu ý giao diện vnet0 xuất hiện trên mạng của tôi khi VM đang chạy):

$ ifconfig
br0 Liên kết mã hóa: Ethernet HWaddr 00: 1e: 33: 88: 07: e5  
          inet addr: 192.168.1.45 Bcast: 255.255.255.255 Mặt nạ: 255.255.255.0
          inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5/64 Phạm vi: Liên kết
          UP MADICAST RUNNING MULTICAST MTU: 1500 Số liệu: 1
          Các gói RX: 6526 lỗi: 0 rớt: 0 tràn: 0 khung: 0
          Các gói TX: 7543 lỗi: 0 rớt: 0 tràn: 0 sóng mang: 0
          va chạm: 0 txqueuelen: 0 
          Các byte RX: 2712940 (2.7 MB) byte TX: 1071835 (1.0 MB)

eth0 Liên kết mã hóa: Ethernet HWaddr 00: 1e: 33: 88: 07: e5  
          UP MADICAST RUNNING MULTICAST MTU: 1500 Số liệu: 1
          Các gói RX: 7181 lỗi: 0 rớt: 0 tràn: 0 khung: 0
          Các gói TX: 7740 lỗi: 0 rớt: 0 tràn: 0 sóng mang: 0
          va chạm: 0 txqueuelen: 1000 
          Các byte RX: 2974585 (2.9 MB) byte TX: 1096580 (1.0 MB)
          Ngắt: 43 Địa chỉ cơ sở: 0x6000 

lo Liên kết mã hóa: Loopback cục bộ  
          inet addr: 127.0.0.1 Mặt nạ: 255.0.0.0
          inet6 addr: :: 1/128 Phạm vi: Máy chủ
          LÊN LOOPBACK CHẠY MTU: 16436 Số liệu: 1
          Các gói RX: 10 lỗi: 0 rớt: 0 tràn: 0 khung: 0
          Gói TX: 10 lỗi: 0 rớt: 0 tràn: 0 sóng mang: 0
          va chạm: 0 txqueuelen: 0 
          Các byte RX: 664 (664.0 B) TX byte: 664 (664.0 B)

vnet0 Liên kết mã hóa: Ethernet HWaddr ca: 0c: 73: c3: bc: 45  
          inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Phạm vi: Liên kết
          UP MADICAST RUNNING MULTICAST MTU: 1500 Số liệu: 1
          Gói RX: 226 lỗi: 0 rớt: 0 tràn: 0 khung: 0
          Các gói TX: 429 lỗi: 0 rớt: 0 tràn: 0 sóng mang: 0
          va chạm: 0 txqueuelen: 500 
          Các byte RX: 26919 (26,9 KB) byte TX: 58929 (58,9 KB)

virbr0 Liên kết mã hóa: Ethernet HWaddr d6: 18: 22: db: ff: 93  
          inet addr: 192.168.122.1 Bcast: 192.168.122.255 Mặt nạ: 255.255.255.0
          UP MADICAST MULTICAST MTU: 1500 Số liệu: 1
          Các gói RX: 0 lỗi: 0 rớt: 0 tràn: 0 khung: 0
          Các gói TX: 0 lỗi: 0 rớt: 0 tràn: 0 sóng mang: 0
          va chạm: 0 txqueuelen: 0 
          Các byte RX: 0 (0,0 B) TX byte: 0 (0,0 B)

Cấu hình cầu của tôi trong khi chạy VM:

chương trình $ brctl
cầu tên id giao diện kích hoạt STP
br0 8000.001e338807e5 không eth0
                                                        vnet0
virbr0 8000.000000000000 có

Lưu ý rằng cả giao diện vnet0 của máy ảo và giao diện eth0 đều được kết nối với cầu br0.

Và MAC trên giao diện br0:

$ brctl showmacs br0
cổng không có mac addr là cục bộ? hẹn giờ lão hóa
  1 00: 05: 5d: cf: 64: 61 không 2.54
  1 00: 19: d2: 42: 5d: 3f số 36.76
  1 00: 19: df: da: af: 7c số 2.86
  1 00: 1e: 33: 88: 07: e5 có 0,00
  1 00: 60: 0f: e4: 17: d6 không 0,79
  2 52: 54: 00: 12: 34: 56 không 0,80
  1 58: 6d: 8f: 17: 5b: c0 không 5.91
  1 c8: aa: 21: be: 8d: 16 không 167,69
  2 ca: 0c: 73: c3: bc: 45 có 0,00

Lưu ý rằng giao diện br0 kết nối máy tính chủ của tôi với cùng một cây cầu đang được khách sử dụng.

Bạn có thể kiểm tra xem bạn có được bắc cầu thay vì NAT được định tuyến đến mạng của bạn bằng cách sử dụng traceroute 8.8.8.8. Nếu nút đầu tiên là bộ định tuyến của mạng chứ không phải là địa chỉ ip của khách thì mạng của bạn sẽ hoạt động chính xác.

Xem tài liệu này .

người quản lý

Hãy chắc chắn rằng bạn đã cài đặt virt-managerhal. Các halgói là một sự phụ thuộc gợi ý cho virt-managervà được sử dụng để xác định cấu hình mạng của hệ thống của bạn khi tạo hoặc chỉnh sửa khách.

Trong khi có cầu br0 được xác định như trên, tôi đã tạo một máy ảo với trình quản lý virt như sau:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Tôi đã có thể truy cập trực tiếp vào phần còn lại của mạng gia đình và Internet từ khách này. Tôi cũng có thể truy cập nó từ máy tính Ubuntu khác (không phải máy chủ, không phải khách) trên mạng gia đình của tôi.

Đây là lệnh rất dài được kvmđiều hành bởi virt-manager (để so sánh với EApub hoặc bất kỳ ai khác gặp rắc rối với điều này):

/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, sockets = 1, lõi = 1, chủ đề = 1 -name chính xác -uuid f057a729-eda6-4b85-84dc-f100c9ae3789 gật gù -nodefaults -chardev socket, id = charmonitor, path = / var / lib / libvirt / qemu / precision.monitor, server, nowait -mon chardev = charmonitor, id = Monitor, mode = control -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubfox-kvm / tmpW8gSGB.qcow2, if = none, id = drive-ide0-0-0, format = qcow2 -device ide-drive, bus = ide.0 , unit = 0, drive = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0 -device rtl8139, netdev = hostnet0, id = net0, mac = 52: 54: 00: 0e: da: 9b, bus = pci.0, addr = 0x3 -chardev pty, id = charserial0 -device isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.1: 0 -vga cirrus -device intel-hda, id = sound0, bus = pci.0, addr = 0x4 -device hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0 -device virtio-Balloon-pci, id = Balloon0, bus = pci.0, addr = 0x5

Đây là phần mạng của mô tả máy ảo trong /etc/libvirt/qemu/quantal.xml

    <interface type='bridge'>
      <mac address='52:54:00:b0:8e:aa'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

Theo liên kết này , để có hiệu suất và độ tin cậy, tốt nhất nên đặt mô hình thiết bị mạng thành virtio, bạn có thể thực hiện việc này bằng cách xem trình duyệt bằng cách nhấn nút i , đi đến cài đặt NIC và đặt "Mô hình thiết bị "Đến virtio. Bạn cũng có thể thêm phần này vào XML ở trên bằng cách thêm dòng:

      <model type='virtio'/>

Tóm tắt

Tất cả điều này diễn ra vào ngày 12.04 là:

  1. Cài đặt virt-manager, cầu-utils, qemu-kvm và các gói liên quan
  2. Hãy chắc chắn rằng mỗi người dùng muốn sử dụng kvm đều thuộc nhóm libvirtd.
  3. Xác định / etc / mạng / giao diện như trên (phù hợp với bài viết được trích dẫn)
  4. Khởi động lại, đảm bảo Ethernet được cắm và không dây (nếu có) tắt.
  5. Hoặc chạy kvm với một hình ảnh trực tiếp với, ví dụ -device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0, hoặc tạo một máy ảo với trình quản lý tài năng, chỉ định mạng Bridge br0 trong bảng 4- Các tùy chọn nâng cao.

Không cần thay đổi thêm cho mạng, khả năng, mẫu hoặc cấu hình.

Để hiển thị một dịch vụ trong khách mới của bạn với Internet, bạn nên:

  1. Chuẩn bị và cấu hình bất kỳ dịch vụ tường lửa nào bạn sẽ cần.
  2. Chỉ định một địa chỉ tĩnh trong cấu hình khách của bạn hoặc trong dịch vụ DHCP của bạn.
  3. Nếu bạn đang sử dụng bộ định tuyến NAT, hãy mở một cổng cho dịch vụ mà bạn đang triển khai hướng nó đến địa chỉ IP của khách.

Hãy nhớ kiểm tra và kích hoạt lại dịch vụ tường lửa cho máy tính chủ của bạn. Nó có thể cần bất kỳ mục để chuyển tiếp lưu lượng cho khách.

Xem https://help.ubfox.com/community/KVM/Installation , https://help.ubfox.com/community/KVM/Networkinghttps://help.ub Ubuntu.com/12.04/serverguide/libvirt. html .


Xin chào, tôi không có thẻ không dây trên máy đó. chỉ Ethernet :)
THpub

Tôi hiểu bạn không có mạng không dây - nhưng những người khác đọc câu hỏi này có thể. Tôi đã đăng một phần quản lý tài năng vì đó là những gì bạn đã sử dụng. Bạn đã chỉ định Bridged to br0 trong bước 4 Tùy chọn nâng cao khi tạo máy ảo chưa? Các tham số mạng trong lệnh kvm được khởi chạy bởi virt-manager có khớp với tôi không? (Bạn có thể nhìn thấy nó bằng cách chạy ps aux | grep kvm).
John S Gruber

Xin chào khi tạo một máy ảo bằng trình quản lý virt, trong các tùy chọn nâng cao, tôi không thấy eth0 và br0.
THpub

Có lẽ đó là vấn đề - đó là chìa khóa để khiến nó hoạt động dưới quyền của người quản lý. Bạn có đang chạy trên máy sẽ lưu trữ nó (và với br0 được xác định brctl shownhư bạn có trong câu hỏi của mình không?) Phiên bản Ubuntu nào bạn đang chạy? Có lẽ đó là sự khác biệt. Phiên bản nào của virt-manager? (Của tôi là 0,9.1-1ubfox5.1).
John S Gruber

Tôi đang chạy Ubuntu 12.04 và virt-manager 0.9.1-1ubfox5.1. Trên thực tế, tôi không có trình quản lý tài năng được cài đặt trong máy chủ. Tôi có nó trong một máy từ xa và tôi sử dụng nó để kết nối với máy chủ. Có phải đó là vấn đề tôi đang có?
THpub

6

Nếu hành vi bạn đang thấy là máy chủ có thể truy cập vào khách và khách có thể truy cập máy chủ, nhưng khách không thể truy cập các máy khác trên mạng hoặc ngược lại ... có lẽ tường lửa của máy chủ đang chặn truy cập.

Xem: https://bugs.launchpad.net/ubfox/+source/ufw/+orms/573461

Cụ thể, phần này: "Bước cuối cùng là vô hiệu hóa bộ lọc mạng trên cầu:

# cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF

3

Đây là hai tập lệnh tôi sử dụng để tạo cầu nối cho qemu-kvm .

Đầu tiên, hãy để máy chủ trở thành bộ định tuyến IP.

Kịch bản ip-router.sh:

#!/bin/bash

internetinterface="eth0"

username=`whoami`

if [ "x$username" != "xroot" ] ; then

    echo    
    echo "You must be root in order to run this script..."
    echo    

    exit    

fi  

if [ "x$1" != "x" ] ; then
    internetinterface="$1"
fi  

if [ "x$1" == "xdel" ] || [ "x$2" == "xdel" ] ; then
    disable="1"
else
    disable="0"
fi  

if [ "$disable" == "0" ] ; then
    echo "Enabling IP forward and setting up masquerade NAT on interface $internetinterface"

    echo 1 > /proc/sys/net/ipv4/ip_forward

    iptables -t nat -A POSTROUTING -o $internetinterface -j MASQUERADE
else
    echo "Disable IP forward and setting down masquerade NAT on interface $internetinterface"

    echo 0 > /proc/sys/net/ipv4/ip_forward

    iptables -t nat -D POSTROUTING -o $internetinterface -j MASQUERADE
fi  

Sau đó, tạo tun-tapgiao diện vàbridge với giao diện mặc định của bạn (thường là giao diện có kết nối Internet).

Kịch bản create-qemu-bridged-tuntap.sh:

#!/bin/bash

bridgename=br0
tapinterface=tap0
outinterface=eth1

if [ "x$1" != "x" ] ; then
    outinterface="$1"
fi  

ifaces=`awk -F: '{print $1}' /proc/net/dev | tail -n +3`
iffound="0"

for i in $ifaces
do  
    if [ "$outinterface" == "$i" ] ; then
            iffound="1"
    fi  
done

if [ "$iffound" == "0" ] ; then
    echo
    echo "Can't find the output interface."
    echo
    exit 1
fi  

outifaceip=`ifconfig | grep -A1 $outinterface | tail -1 | awk -F: '{print $2}' | awk '{print $1}'`
outifaceiptokens=`echo $outifaceip | awk -F \. '{print NF}'`

if [ "$outifaceiptokens" != "4" ] ;  then
    echo
    echo "The selected output interface $outinterface doesn't seem to have a valid IP address."
    echo
    exit 1
fi  

hostaddress="192.168.1.1"
guestaddress="192.168.1.95"

sudo tunctl -t $tapinterface

sudo brctl addbr $bridgename
sudo brctl addif $bridgename $tapinterface

sudo ip link set $bridgename up
sudo ip addr add $hostaddress/24 dev $bridgename

sudo route add -host $guestaddress dev $bridgename
sudo parprouted eth1 $bridgename

sudo ~/scripts/ip-router.sh $outinterface

Tôi sử dụng các tập lệnh này hàng ngày, vì vậy chúng cũng sẽ hoạt động tốt cho bạn. Bạn sẽ phải cài đặt một số gói để có tất cả các hoạt động này. Sử dụng:

dlocate `which COMMAND`

bạn có thể thấy gói nào là bắt buộc phải có COMMAND. Ví dụ để xem gói nào bắt buộc phải có brctl, chỉ cần chạy:

dlocate `which brctl`

và bạn sẽ có:

bridge-utils: /sbin/brctl

Sử dụng cùng một cách tiếp cận cho tất cả các lệnh trong các tập lệnh này, ít nhất bạn nên chạy aptitudedòng lệnh này :

sudo aptitude install dlocate iproute parprouted iptables uml-utilities bridge-utils net-tools

Cuối cùng, bạn có thể khởi chạy tập lệnh chính (như một người dùng bình thường):

#> create-qemu-bridged-tuntap.sh eth0
Set 'tap0' persistent and owned by uid 0
Enabling IP forward and setting up masquerade NAT on interface eth0

Đang chạy, ip addrbạn sẽ thấy một br0giao diện có địa chỉ IP 192.168.1.1, như được chỉ định bên trong create-qemu-bridged-tuntap.shtập lệnh:

#> ip addr
8: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 36:76:ee:d6:63:b2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 scope global br0

Đây là cái host addressnhìn thấy bởi guest. Ngược lại, khách sẽ có địa chỉ IP192.168.1.95 (một lần nữa, điều này có thể dễ dàng thay đổi bên trong tập lệnh chính).

Bây giờ, bằng cách sử dụng virt-manager, bạn chỉ cần thiết lập nic khách của bạn để sử dụng br0như giao diện vật lý.

virt-manager-br0-nic

Bên trong guest, bạn chỉ cần cung cấp cho eth0một địa chỉ IP 192.168.1.95và mọi thứ sẽ chạy tốt.

Slackware13:~> ifconfig 
eth0      Link encap:Ethernet  HWaddr 52:54:00:F7:6A:78  
          inet addr:192.168.1.95  Bcast:192.168.1.255  Mask:255.255.255.0

Mặc dù bạn đang sử dụng một cây cầu để làm điều đó, nhưng có vẻ như tôi đang tạo ra một cơ sở chuyển tiếp NAT. Tuy nhiên, nếu bạn có thể chuyển tiếp các cổng máy chủ nhất định, có thể nó sẽ làm những gì EApub muốn. Câu trả lời rất thú vị và rất hữu ích.
John S Gruber

Cảm ơn bạn, nó hoạt động hoàn hảo cho mục đích của tôi. Nhưng, như một vấn đề thực tế, tôi không cần quyền truy cập từ xa vào VM của mình và tôi nghĩ rằng EApub chỉ đơn giản là cố gắng truy cập Internet trên VM của nó.
Avio

@Avio Không có bạn, tôi cần truy cập từ xa vào máy của tôi. Nếu tôi đặt NAT và tạo VM, nó hoạt động.
THpub

Có một manh mối ở đây về một vấn đề tôi gặp phải khi chuyển tiếp IP bị tắt, điều đó được cat /proc/sys/net/ipv4/ip_forwardđưa ra 0. Kích hoạt nó và duy trì nó đã giải quyết vấn đề cho tôi, hướng dẫn trong bài viết này .
Jake Cobb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.