iptables:将本地流量从本地重定向到远程端口

iptables:将本地流量从本地重定向到远程端口

我的问题是:如何使用 iptables 将所有传入和传出流量从给定的本地端口(127.0.0.1:端口)重定向到另一个主机的某个端口?

我在 Linux 主机上有一个 Android 容器(anbox)。

Anbox 创建一个网桥(从容器中的 192.168.250.2 到主机上的 192.168.250.1),它将把来自 Android 容器的流量转发到 Anbox 所运行的机器所连接的网络。

Anbox 的 ifconfig 输出:

x86_64:/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:1548 TX bytes:1548 

eth0      Link encap:Ethernet  HWaddr 26:e8:ad:ef:c7:37
          inet addr:192.168.250.2  Bcast:192.168.250.255  Mask:255.255.255.0 
          inet6 addr: fe80::24e8:adff:feef:c737/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:493 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:504 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:284033 TX bytes:141521 

在主机上,我有一个监听 192.168.250.1:8085 的 Web 服务器

我该如何将其转发到 Anbox 的 127.0.0.1:8085?

换句话说,我想在 Anbox 内部打开一个浏览器,在地址栏中输入“http://127.0.0.1:8085”并查看来自主机的 Web 服务器的响应。

我尝试在 Anbox 中这样做:

x86_64:/ # echo "1" >/proc/sys/net/ipv4/ip_forward
x86_64:/ # sysctl -w net.ipv4.conf.all.route_localnet=1
x86_64:/ # iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 
86_64:/ # iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 8090 -j DNAT --to-destination 192.168.250.1
iptables -t nat -A INPUT -p tcp --sport 8090 -j SNAT --to-source 127.0.0.1

但我收到了“连接被拒绝”的提示。

http://192.168.250.1:8085Anbox 内部工作正常。

那么我该怎么做呢?提前感谢大家的帮助。

答案1

好吧,我终于成功了!错误在于我没有替换原始地址,主机的服务器尝试向 127.0.0.1 发送响应数据包

因此,正确的解决方案是在客户机(Anbox 容器)上写入以下规则:

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
echo "1" >/proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 8090 -j DNAT --to-destination 192.168.250.1
iptables -t nat -A INPUT -p tcp --sport 8090 -j SNAT --to-source 127.0.0.1
iptables -t nat -A POSTROUTING -p tcp --dport 8090 -j SNAT --to-source 192.168.250.2

相关内容