Bạn có thể sử dụng một cầu nối mà không cần làm nô lệ cho bất kỳ giao diện Ethernet vật lý nào của mình trên máy chủ VM.
Giả sử chúng tôi gắn bó với sự lựa chọn của mạng con 10.0.2.0/24
(không cần thiết):
# ip l add natbr0 type bridge
# ip thêm 10.0.2.1/24 dev natbr0
Sau đó tạo tệp sau:
$ echo 'cho phép natbr0' | sudo tee /etc/qemu/bridge.conf
cho phép natbr0
Sau đó, bắt đầu qemu với ví dụ: cầu -nic,br=natbr0
hoặc cầu -netdev,br=natbr0,id=nb0 -thiết bị virtio-net,netdev=nb0
, cái nào sẽ vỗ nhẹ
máy ảo của bạn tới cầu một cách năng động (tức là vỗ nhẹ
giao diện sẽ bị xóa sau khi tắt máy ảo).
Bạn cũng cần định cấu hình IP tĩnh trên VM:
# ip thêm 10.0.2.2/24 dev ens3
# ip r thêm mặc định qua 10.0.2.1
Trừ khi bạn cũng thiết lập máy chủ DHCP (ví dụ: dnsmasq) trên Máy chủ. Đừng quên định cấu hình máy chủ DNS để sử dụng bên trong VM.
Lưu ý rằng các máy ảo sử dụng cùng một cầu nối có thể giao tiếp với nhau trừ khi bạn chặn giao tiếp đó bằng một số phương tiện (ví dụ: ebtables).
Các mặc định
định tuyến (và máy chủ DNS sẽ sử dụng) chỉ cần thiết nếu bạn muốn VM có thể tiếp cận "bên ngoài". Nếu bạn chỉ cần nó để có thể giao tiếp với máy chủ VM, bạn nên bỏ qua lệnh thứ hai và có thể dừng đọc. (Chà, đọc Tái bút
)
Có lẽ tốt nhất là định cấu hình, ví dụ:. dnsmasq trên máy chủ để trở thành trình chuyển tiếp DNS nếu bạn không muốn sử dụng máy chủ DNS "công khai" cụ thể trong VM, mặc dù sử dụng DNAT để chuyển tiếp các yêu cầu DNS tới ví dụ: 192.168.1.1
nên làm việc cho những cái cơ bản.
Sau đó, bạn sẽ cần bật chuyển tiếp IP:
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
Nếu bạn muốn tránh chuyển tiếp IP từ/đến giao diện mạng nhất định (ví dụ. điều chỉnh0
) vì lý do bảo mật, bạn sẽ cần thiết lập tường lửa. Ví dụ:
# iptables -A FORWARD -i tun0 -j DROP
# iptables -A FORWARD -o tun0 -j DROP
Vì bạn có các tuyến đường hầm (VPN) thực tế sẽ ghi đè mặc định
tuyến đường, lưu lượng truy cập từ VM đến Internet cũng sẽ đi vào đường hầm (trừ khi bạn đã thêm các quy tắc ví dụ ở trên). Nếu bạn muốn lưu lượng truy cập tăng, ví dụ: thông qua bộ định tuyến của bạn, bạn sẽ cần định tuyến theo chính sách. Ví dụ:
# ip ru add bảng tra cứu iif natbr0 123
# ip r add 192.168.1.1 dev wlan0 bảng 123 # có thể là tùy chọn
# ip r add default qua 192.168.1.1 bảng 123
Bạn cũng có thể ngăn máy ảo của mình truy cập máy chủ LAN của mình:
# iptables -A FORWARD -i natbr0 -d 192.168.1.0/24 -j DROP
Tạo ngoại lệ (lưu ý -TÔI
) nếu bạn định chuyển hướng các yêu cầu DNS tới bộ định tuyến của mình:
# iptables -I FORWARD -i natbr0 -d 192.168.1.1 -p tcp --dport 53 -j CHẤP NHẬN
# iptables -I FORWARD -i natbr0 -d 192.168.1.1 -p udp --dport 53 -j CHẤP NHẬN
Cuối cùng, định cấu hình iptables để thực hiện SNAT động (theo giao diện gửi đi) cho mạng con VM của bạn:
# iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -j MASQUERADE
Lưu ý rằng điều này KHÔNG có ý định và sẽ không ngăn chặn chính xác một số lưu lượng truy cập nhất định từ "bên ngoài" (máy chủ LAN vật lý hoặc Internet của bạn; máy chủ VM không được tính) để có thể tiếp cận máy ảo của bạn. Nó chỉ phá vỡ giao tiếp dưới dạng tác dụng phụ khi địa chỉ nguồn của lưu lượng trả lời từ máy ảo bị thay đổi trước khi chúng được chuyển tiếp ra ngoài.Để cách ly thích hợp, bạn sẽ cần (bổ sung) các quy tắc thích hợp trong PHÍA TRƯỚC
chuỗi. Cân nhắc thiết lập "trạng thái" ở đó nếu bạn có nhu cầu như vậy.
Ngoài ra, bạn có thể chuyển hướng các yêu cầu DNS đến máy chủ lưu trữ từ máy ảo đến bộ định tuyến của mình:
iptables -t nat -A PREROUTING -d 10.0.2.1 -p udp --dport 53 -j DNAT --to-destination 192.168.1.1
iptables -t nat -A PREROUTING -d 10.0.2.1 -p tcp --dport 53 -j DNAT --to-destination 192.168.1.1
Cái nào ít nhiều sẽ cho phép bạn sử dụng 10.0.2.1
làm máy chủ DNS trong VM.
Tái bút Tất cả các thao tác trên (ngoại trừ việc tạo/ghi vào /etc/qemu/bridge.conf
) không ổn định, tức là chúng sẽ biến mất sau khi bạn khởi động lại (trừ khi bản phân phối của bạn làm điều gì đó ngớ ngẩn). Tôi sẽ không đi sâu vào cách bạn có thể làm cho chúng bền bỉ, vì có nhiều cách/cách tiếp cận khác nhau và nó có thể dành riêng cho bản phân phối.