将传入数据包从端口 25565 转发到经过 natted 的内部客户端?IPTables

将传入数据包从端口 25565 转发到经过 natted 的内部客户端?IPTables

我最近一直在学习使用 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(希望它是一个固定的)。

首先,你需要使用PREROUTINGDNAT 链将你的外部 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 服务器执行此操作,您会找到很多资源(此站点上也有)。逻辑保持不变。

相关内容