我正在尝试从 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,但无法实现。我该如何实现呢?
提前致谢,Baris
答案1
假设你已经设置好 NAT 并正常运行(关于这方面的教程有大概一百万个),端口转发只是一个正常的规则,例如
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 5678 -j DNAT --to 10.0.0.5:80
iptables -A INPUT -p tcp -m state --state NEW --dport 5678 -i eth0 -j ACCEPT
对每个想要转发到某处的端口进行涂抹、冲洗并重复上述步骤。
要设置 NAT 本身,请执行以下操作:
ifconfig eth1 10.0.0.1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
(假设 eth1 是您的本地网络,eth0 是您的互联网连接。)然后添加端口转发命令。