Iptables
Proxmox Nat 網路問題
定義
我已經安裝了 Proxmox 3.2,我正在嘗試將虛擬機配置為處理所有流量並將它們轉發到具有私有 IP 的節點的通信伺服器。
我使用兩個具有完全相同配置的 CentOS 虛擬機為 NAT 網路配置了伺服器。
我做什麼
Proxmox wiki 有一個非常有限和基本的 nat 網路文件。我在這里和 proxmox 論壇上
發現了類似的問題(this、this )。我試圖了解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。現在一切正常。