我的 Linux 机器上有两个接口,一个配置为公共 IP 110.111.250.241 - eth0
,另一个配置为 LAN 。我有一台带有 apache Web 服务器的10.42.43.1
客户端机器。10.42.43.174
我想10.42.43.174
从互联网(家里或其他地方)访问 的 80 端口。所以我需要通过 进行端口转发iptables
。在sysctl
ip_forward
is 1 中,我尝试设置一些预路由 iptable 规则,但我仍然无法访问我的公共 IP 的 10.42.43.174 的 80 端口。
答案1
您可以尝试这个规则吗?它应该可以完成这项工作?如果不行,正如 MadHatter 所说,您应该提供iptables -L -n -v
并iptables -t nat -L -n -v
输出
iptables -t nat -A PREROUTING -j DNAT -i eth0 -p tcp --dport 80 --to-destination 10.42.43.1:80
答案2
您的规则是正确的,但缺少用于将源 IP 重写为路由机器 IP 的 SNAT 或 MASQUERADE 规则。完整的规则集如下:
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 110.111.250.241 --dport 80 -j DNAT --to 10.42.43.174
iptables -A FORWARD -p tcp -i eth0 -d 10.42.43.174 --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE