Iptables

Proxmox Nat 網路問題

  • January 28, 2020

定義

我已經安裝了 Proxmox 3.2,我正在嘗試將虛擬機配置為處理所有流量並將它們轉發到具有私有 IP 的節點的通信伺服器。

我使用兩個具有完全相同配置的 CentOS 虛擬機為 NAT 網路配置了伺服器。

我做什麼

Proxmox wiki 有一個非常有限和基本的 nat 網路文件。我在這里和 proxmox 論壇上

發現了類似的問題(thisthis )。我試圖了解linux nat 網路的基礎知識,所以我從頭到尾完成了這個非常容易理解的教程。我閱讀了這篇文章以了解iptables nat 規則

問題

安裝和配置後,當我從主機 ping 到 VM 或從 VM 到主機時,輸出為:

root@testPrx:~# ping 10.0.4.2
PING 10.0.4.2 (10.0.4.2) 56(84) bytes of data.
From 10.0.4.1 icmp_seq=2 Destination Host Unreachable

當我嘗試從具有網際網路連接和(192.168.0.3)的同一網路中的伺服器遠端登錄到通信伺服器的公共 IP 時

bash-4.1# telnet 192.168.0.2 2701
Trying 192.168.0.2...
telnet: connect to address 192.168.0.2: No route to host

當我嘗試 telnet 連接到 localhost 時,192.168.0.2 結果相同:

root@testPrx:~# telnet localhost 2701
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

問題

我的錯誤是什麼?

配置

所有主機和虛擬機配置為:

Proxmox 伺服器

Proxmox 版本

root@testPrx:~# pveversion
pve-manager/3.2-4/e24a91c1 (running kernel: 2.6.32-29-pve)

網路介面

Web界面添加的網路介面: 在此處輸入圖像描述

  • net0 -> vmbr0
  • net1 -> vmbr1

root@testPrx:~# cat /etc/network/interfaces

auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
       address 192.168.0.2
       netmask 255.255.255.0
       gateway 192.168.0.1
       bridge_ports eth0
       bridge_stp off
       bridge_fd 0
auto vmbr1
iface vmbr1 inet static
       address 10.0.4.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.0.4.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.4.0/24' -o vmbr0 -j MASQUERADE

#these rules forward traffic on port 2701 to port 22 on the VM at IP 10.0.4.2

post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2701 -j DNAT --to 10.0.4.2:22
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2702 -j DNAT --to 10.0.4.2:22

nat的防火牆規則(沒有任何過濾器)

root@testPrx:~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere             tcp dpt:2701 to:10.0.4.2:22

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.0.4.0/24          anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

路由表

root@testPrx:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.4.0        *               255.255.255.0   U     0      0        0 vmbr1
192.168.0.0     *               255.255.255.0   U     0      0        0 vmbr0
default         192.168.0.1     0.0.0.0         UG    0      0        0 vmbr0

IP轉發

root@testPrx:~# cat /proc/sys/net/ipv4/ip_forward
1

虛擬機

作業系統版本

-bash-4.1# cat /etc/redhat-release
CentOS release 6.4 (Final)

介面

eth0

-bash-4.1# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.0.3
GATEWAY=192.168.0.1
NETMASK=255.255.255.0

eth1

-bash-4.1# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=10.0.4.2
GATEWAY=10.0.4.1
NETMASK=255.255.255.0

SSH 守護程序成功執行和監聽埠(22)

-bash-4.1# netstat -puntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:85                  0.0.0.0:*                   LISTEN      1100/sshd

路由表

-bash-4.1# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.4.0        *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1003   0        0 eth1
default         10.0.4.1        0.0.0.0         UG    0      0        0 eth1

我在睡覺時發現了我的錯誤,所以我立即醒來並解決了這個問題。進行 nat 網路的介面是 vmbr1,但是當我設置虛擬機時,我為網路設備分配了錯誤的橋接模式 (vmbr0)。

為了解決這個問題,我停止了虛擬機並將橋接模式從 vmbr0 編輯到 vmbr1。現在一切正常。

在此處輸入圖像描述

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