iptables 和端口重定向(nat)

iptables 和端口重定向(nat)

我正在尝试从 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 是您的互联网连接。)然后添加端口转发命令。

相关内容