我在通过 VirtualBox 运行的虚拟机上设置了互联网,并设置了端口转发。首先,在主机 (iproutes2) 的 rt_tables 中,我添加了以下内容:
100 vm0
然后我运行这个:
ip rule add from 192.168.56.100 table vm0
ip route add default dev eth0 via 10.0.1.1 table vm0
192.168.56.100 是虚拟机的本地 IP 地址。10.0.1.1 是我的网关。此外,192.168.56.1 是“仅主机”适配器中主机的本地 IP 地址。
然后在主机上进行 iptables 设置
iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface eth0 --source 192.168.56.100 -j ACCEPT
iptables -t filter -I FORWARD --in-interface eth0 --out-interface vboxnet0 --destination 192.168.56.100 -j ACCEPT
iptables -t nat -A POSTROUTING -o vboxnet0 -j MASQUERADE
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -i vboxnet0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i vboxnet0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vboxnet0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 15:1722 -j DNAT --to-destination 192.168.56.100
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1724:65530 -j DNAT --to-destination 192.168.56.100
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 15:1722 -j DNAT --to-destination 192.168.56.100
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 1724:65530 -j DNAT --to-destination 192.168.56.100
抱歉。也许这里的一些 iptables 规则是多余的。
VM 通过“仅主机”适配器连接到互联网,并可以接受转发端口上的所有连接。问题是主机没有告诉 VM 客户端的真实 IP 地址。VM 收到 192.168.56.1,而不是客户端的真实 IP。示例:
root@vm:~# lsof -i :22 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 691 root 3u IPv4 21232 0t0 TCP *:22 (LISTEN)
sshd 691 root 4u IPv6 21234 0t0 TCP *:22 (LISTEN)
sshd 996826 root 4u IPv4 2857061 0t0 TCP 192.168.56.100:22->192.168.56.1:61441 (ESTABLISHED)