我正在尝试在我的家庭网络上设置发夹文章和一个上一个问题。我的网络如下,主机B
提供一些服务,让我们选择 SSH 端口22
)
发夹的原因很典型:我ssh.example.com
在 Internet DNS 上定义了它,它指向200.200.200.200
端口 上的我的公共 IP () 2223
。该端口通过以下方式重定向到主机B
( 192.168.10.2:22
)
iptables -t nat -A PREROUTING -i nicWan -p tcp --dport 2223 -j DNAT --to-destination 192.168.10.2:22
我希望能够通过以下方式192.168.10.2:22
与主机联系A
ssh 200.200.200.200 -p 2223
尽管自 1994 年以来一直在管理 Linux 机器,但我从未真正仔细研究过,iptables
因为我使用的是shorewall
以及简短的firehol
。
我最初的问题是了解发夹是否适用于“来自 LAN”的整个流量,或者我是否需要每个目标端口一个规则(我提到的参考文献和其他几个参考文献有所不同,我更喜欢前者)。
主要问题来自于我不了解在上下文iptables
(链)中我需要设置什么。我理解操作的原因(在第一个参考文献中描述得很好),只是我不知道该把它放在哪里。
具体来说,我该怎么说iptables
语言说 NAT 来自的数据包任何设备上的192.168.10.0/24
想要去的地方200.200.200.200
,并伪装他们以便他们可以回来?
答案1
我想说你的接口是错误的,因为来自主机 A 的流量到达你的 nicLan,而不是 nicWan。
正如您所说,您需要伪装,以便您的回程包裹能找到正确的地方。第二条规则伪装来自本地子网并返回本地服务器的所有流量。
iptables -t nat -A PREROUTING -i nicLan --destination 200.200.200.200/32 --jump DNAT --to-destination 192.168.10.2
iptables -t nat -A POSTROUTING -o nicLan --source 192.168.10.0/24 --destination 192.168.10.2/32 --jump MASQUERADE
正如您所看到的,我没有定义任何端口,因此从您的 LAN 到您的公共地址的所有流量都会经过 DNAT 传输到本地 LAN 中的服务器。
如果需要,不要忘记在过滤表中添加允许规则。