我正在尝试从 ubuntu 12.04 构建路由器。我要做的是,通过使用 1 个公共 IP(100.0.0.100)和大量本地 ip,例如 10.0.0.0/16,将每个端口映射到一个 ip,例如;
100.0.0.100:5678 <-> 10.0.0.5:80 // http://100.0.0.100:5678 should bring me web server on 10.0.0.5
100.0.0.100:6789 <-> 10.0.0.6:8080
100.0.0.100:7890 <-> 10.0.0.7:22
....
我所做的是;我构建了如下所示的 NAT 规则(假设它接受来自 eth0 的数据包并通过 eth1 转发)
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables-save
service ufw restart
然后尝试了这些命令;
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 213.128.88.2:80
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i eth0 -j ACCEPT
我测试是通过尝试使用 IP 192.168.0.36(这是 Ubuntu 服务器 IP)打开网站
此外; “iptables -t nat -L”的输出是;
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:http to:213.128.88.2:80
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
我尝试的是具有各种 nat 规则的 iptables,但我无法实现这一点。我怎样才能做到这一点?
在此先感谢, 巴里斯
假设您已经设置并工作了 NAT(大约有一百万个教程),端口转发只是一个正常规则,例如
对您要转发到某处的每个端口进行泡沫、冲洗和重复操作。
要设置 NAT 本身,请执行以下操作:
(假设 eth1 是您的本地网络,而 eth0 是您的互联网连接。)然后添加端口转发命令。