我最近一直在学习使用 iptables,并在 virtualbox 中创建了一个小型 nat 网络。我有一个 Debian 服务器,用于为内部客户端进行 nat。其中一个内部客户端正在托管一个 minecraft 服务器进行测试。
我想要做的是让所有使用端口 25565 的传入连接从 debian 服务器进入 eth0,然后转发它们具体来说到内部 minecraft 服务器 (192.168.200.4) 出 eth1。就像在常规 Linksys 路由器中一样。
我想到但实际上不起作用的是:
iptables -A FORWARD -i eth0 --dport 25565 -o eth1 -d 192.168.200.4 -j ACCEPT
然后我读了错误和其他说明,我实际上需要使用 POSTROUTING/PREROUTING。因此我尝试:
iptables -t nat -A POSTROUTING -i eth0 -p tcp --dport 25565 -o eth1 -d 192.168.200.4 -j ACCEPT
现在显然这些都不起作用,但我想知道我是否走在正确的轨道上?
这是虚拟网络的图表,以便大家可以直观地看到它:
https://i.stack.imgur.com/P9rZS.jpg
目前,iptables 配置如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere tcp dpt:telnet
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
任何其他详细信息我们将很乐意添加:)
(INPUT 链中的任何内容都只是我之前弄乱的其他规则,最初,它唯一的规则是 FORWARD 链下的规则)
这是我针对 NAT 所遵循的教程: http://www.revsys.com/writings/quicktips/nat.html
答案1
在您的方案中,您的外部 IP 是不正确的:192.168.1.161
是一个内部 IP。
你有一个真正的外部(公共)IP:使用以下方法检查http://www.whatismyip.com(希望它是一个固定的)。
首先,你需要使用PREROUTING
DNAT 链将你的外部 IP 映射到你的内部 IP:
iptables -t nat -A PREROUTING -p tcp -d $PUBLIC_IP --destination-port 25565 -j DNAT --to 192.168.200.4:25565
然后,您需要允许从源到目标的接口之间转发数据包:
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.200.4 --destination-port 25565 -m state --state NEW -j ACCEPT
但是,在 Google 上搜索如何为 Web 服务器执行此操作,您会找到很多资源(此站点上也有)。逻辑保持不变。