使用 iptables 正确地转发外部 IP

使用 iptables 正确地转发外部 IP

我正在尝试将端口 80 上的所有传入互联网/LAN 请求转发到我的本地计算机(运行 Apache),当前 iptables 工作(将传入的互联网流量转发到我的桌面,但如果我尝试从我的本地网络访问它,它将不起作用。

将我的 Ubuntu 服务器连接到互联网的接口是 ppp0(通过处于桥接模式的路由器拨号 DSL 连接),它连接到 eth0,而 eth1 连接到我的内部 LAN。

iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o ppp0 -j MASQUERADE
iptables -A INPUT -i ppp0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#port forwarding
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80
iptables -A FORWARD -i ppp0 -p tcp --dport 80 -j ACCEPT

还测试了

iptables -t nat -A PREROUTING -i lo -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80

那里没有运气

到目前为止我能够收集到的信息(通过日志)是,直接从 LAN 访问外部服务器 ip 会直接转到 eth1,这是可以理解的(我认为)。

所以我现在需要的(我猜)是一条规则,它将转发 eth1 上的 LAN 流量,而不会干扰 ppp0 预路由规则(因为将 eth1 上的所有传入流量转发到我的本地机器会中断互联网连接)

答案1

我认为您缺少 SNAT。如果没有 SNAT,源 IP 会指向本地网络上的计算机,返回数据包会直接定向到源计算机,源计算机会将其视为无效数据包而丢弃。对于外部计算机,这不是问题,因为 NAT 通常是在默认网关计算机上设置的。

尝试添加

iptables -t nat -A POSTROUTING -d 192.168.2.2 --dport 80 -j SNAT

相关内容