我有一台面向 LAN 的地址为192.168.5.100(eth0)和另一个面向 LAN 的地址192.168.6.6(eth1)。
在这台服务器上,我有一个 Fedora 的 Virtualbox 实例,运行着一个 Apache Web 服务器(在端口 8080 上),该服务器有一个桥接接口,连接到主机服务器上的 eth1,地址为192.168.6.7
192.168.6.x 网络上的用户可以毫无问题地访问 Vbox 实例 (192.168.6.7) 上的 Web 服务器。
我的问题是应该创建/执行什么样的 iptables 条目或命令,以允许 192.168.5.x 网络上的用户访问 vbox 实例上的 Web 服务器。(我希望他们的网址可以是这样的: http://192.168.5.100:8080)
答案1
在这种情况下,只有几个选项:1)允许 192.168.5.x 网络上的主机直接路由到 192.168.6.x 网络。(即通过中间主机 192.168.5.100 和内核中启用的 ip 转发路由到您的网络。
2)将 8080 端口转发到正确的 IP 和端口(检查 balance-ng 并在 eth0 接口上运行它)
3)基于iptables的端口转发/nat
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.167.5.100 --dport 8080 -j DNAT --to 192.168.6.7:80
/sbin/iptables -A FORWARD -p tcp -i eth0 -d 192.168.6.7 --dport 80 -j ACCEPT
启用 IP 转发echo 1 > /proc/sys/net/ipv4/ip_forward
答案2
对我来说,以下方法有效:
sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.6.7:8080
在 ubuntu 10.04 主机上使用 virtualbox 3.2.12。其他答案没有提到的是伪装,在我看来,伪装对于正确获取答案包是必要的。
答案3
这会将接口 eth0 上端口 8080 上的请求转发到接口 eth1 上端口 8080 上的 192.168.6.7。
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 --to-destination 192.168.6.7:8080 -j DNAT