我的问题是:如何使用 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