我的目标是将连接从本地主机重定向到远程服务器,并且能够即时更改远程地址,而无需更改任何客户端配置。我现在可以在外部接口上使用 nat 来做到这一点,如下所示:
LOCAL_IP=10.1.1.10
LOCAL_PORT=8888
REMOTE_IP=10.1.1.11
REMOTE_PORT=9999
iptables -t nat -A OUTPUT -p tcp -d $LOCAL_IP --dport $LOCAL_PORT -j DNAT --to-destination $REMOTE_IP:$REMOTE_PORT
iptables -t nat -A POSTROUTING -p tcp -d $REMOTE_IP --dport $REMOTE_PORT -j SNAT --to-source $LOCAL_IP
Run Code Online (Sandbox Code Playgroud)
这工作正常,但仍将客户端的配置耦合到主机 IP 地址。真正好的是能够将 NAT 流量转换为127.0.0.1:8888, 到10.1.1.11:9999. 这似乎应该可以使用 DNAT/SNAT|MASQUERADE 组合来实现,但我还没有想出一个可行的配置。我尝试的任何配置似乎都会默默地丢弃数据包(可能被火星规则捕获?我确实启用了 ip_forward)。