我是通过 StackOverflow 被推荐到这里的。
我正在使用 IpTables 将一台服务器上的传入端口转发到外部服务器(不在 LAN 上)和同一端口。我遇到的问题是我必须使用 MASQUERADE,否则它不会转发。因此,我服务器上的所有用户都将我的第一个服务器 IP 作为他们的 IP。
这是我的 iptables 配置的细目。
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:25565 to:192.241.156.238:25565
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
如能得到任何帮助我将不胜感激,这样我就可以从一台服务器转发到另一台服务器。
另外,我有个问题,当我这样做时,是不是只是转移了连接,然后所有来回的数据都在两台电脑之间传输?还是我的带宽增加了一倍?
答案1
伪装工作正常,并且是必需的。如果外部服务器将原始本地 IP 地址作为源地址接收,它将不知道将答案发回何处,或者最多会尝试通过其本地网络发送答案。具有伪装的机器路由处理所有连接,然后将答案重定向到正确的本地机器。