Iptables

具有多個公共 IP 的 proxmox KVM 路由網路

  • February 4, 2016

我與 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

引用自:https://serverfault.com/questions/591102