Iptables
具有多個公共 IP 的 proxmox KVM 路由網路
我與 hetzner 有一個專門的託管。另外我買了一個 6IP 子網。
我的主 IP 是:148.111.111.200 我的主子網是:255.255.255.224
我的附加 IP 是 148.222.222.1 到 148.222.222.6。
我的使用場景如下:幾個實例將具有面向公眾的 IP(網路伺服器等)所有實例將為內部 LAN 設置第二個 nic,因此我可以從外部鎖定私有網路上的 mysql 伺服器、memcached 等。
網路伺服器將在 148.222.222.1 上線上,並將有第二個 NIC 與 ip 10.10.10.10
目前,我已經設置了內部區域網路。所有實例都可以通過內部 IP (10.10.10.X) 相互連接和 ping,但我的網路伺服器無法訪問網際網路。
我不能使用橋接模式,因為 hetzner 不允許在同一個外部 IP 上使用多個 MAC,所以我必須使用路由模式。這是主機的 /etc/network/interfaces 文件:
# network interface settings auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 148.111.111.200 netmask 255.255.255.255 pointopoint 148.111.111.193 gateway 148.111.111.193 broadcast 148.111.111.223 post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp #commentedout #up route add -net 148.111.111.192 netmask 255.255.255.224 gw 148.111.111.193 eth0 # default route to access subnet auto vmbr0 iface vmbr0 inet static address 148.111.111.200 netmask 255.255.255.255 bridge_ports none bridge_stp off bridge_fd 0 up ip route add 148.222.222.1/32 dev vmbr0 up ip route add 148.222.222.2/32 dev vmbr0 auto vmbr1 iface vmbr1 inet static address 10.10.10.1 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE auto vmbr2 iface vmbr2 inet static address 148.222.222.1 netmask 255.255.255.248 bridge_ports none bridge_stp off bridge_fd 0
這是我的 kvm 介面文件:
auto eth0 iface eth0 inet static address 148.222.222.1 netmask 255.255.255.255 pointopoint 148.111.111.200 gateway 148.111.111.200 dns-nameservers 8.8.8.8 8.8.4.4 auto eth1 address 10.10.10.12 netmask 255.255.255.0 network 10.10.10.0 broadcast 10.10.10.255
目前,KVM 實例可以相互 ping 通,但沒有其他工作主機可以 ping 實例,但沒有其他任何東西而且我無法在我的實例上訪問網際網路。
我需要在我的配置中進行哪些更改才能使其正常工作。
PS NIC 類型在 proxmox 中設置為 virtio
我通過使用以下配置解決了這個問題:
auto eth0 iface eth0 inet static address 148.111.111.200 netmask 255.255.255.255 pointopoint 148.111.111.193 gateway 148.111.111.193 broadcast 148.111.111.193 # default route to access subnet auto vmbr0 iface vmbr0 inet static address 148.111.111.200 netmask 255.255.255.255 bridge_ports none bridge_stp off bridge_fd 0 bridge_maxwait 0 #subnet up ip route add 148.222.222.0/32 dev vmbr0 up ip route add 148.222.222.1/32 dev vmbr0 up ip route add 148.222.222.2/32 dev vmbr0 up ip route add 148.222.222.3/32 dev vmbr0 up ip route add 148.222.222.4/32 dev vmbr0 up ip route add 148.222.222.5/32 dev vmbr0 up ip route add 148.222.222.6/32 dev vmbr0 up ip route add 148.222.222.7/32 dev vmbr0 auto vmbr1 iface vmbr1 inet static address 10.10.10.1 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
在您的客戶端機器上,您需要定義一個或兩個網路介面
- 一個用於 VMBR0(面向公眾的 IP)
- 一個用於 VMBR1(私有 IP - 10.10.10.X)
ubuntu /etc/network/interfaces的範例配置
#vmbr0 auto eth0 iface eth0 inet static address 148.222.222.1 netmask 255.255.255.255 pointopoint 148.111.111.200 gateway 148.111.111.200 #public IP for the proxmox node dns-nameservers 8.8.8.8 8.8.4.4 #vmbr1 auto eth1 iface eth1 inet static address 10.10.10.20 netmask 255.255.255.0 network 10.10.10.0 broadcast 10.10.10.255