我可以从一个接口端口转发到另一个接口端口吗?
Posted
技术标签:
【中文标题】我可以从一个接口端口转发到另一个接口端口吗?【英文标题】:Can I port forward from one interface port to another interface port? 【发布时间】:2019-08-31 10:26:30 【问题描述】:我正在“编程 TCP 套接字”并且有一些基本问题。
当我为一个 TCP 客户端指定一个 IP 地址和端口时,我知道这个 IP 地址属于一个网络接口而不是整个实际的计算机,并且计算机有多个网络接口,包括向内的本地主机环回接口。
指定给 TCP 客户端的端口是否属于指定的接口?例如,是否可以有两个相同编号的端口但在两个不同的接口上?像接口A的5000端口和接口环回的5000端口?
我问这个,因为我正在尝试创建一个 TCP 客户端,它将通过套接字连接到在 android 虚拟设备上运行的 TCP 服务器。 TCP客户端运行在机器A上,android模拟器运行在机器B上。
我查看了 Android 模拟器的端口转发,并了解到模拟器在虚拟路由器后面运行,并且我必须配置端口转发,以便 TCP 套接字连接可以从一个端口路由到另一个端口,但这些文档仅有关于如何从环回接口(所谓的本地主机)进行端口转发的说明,所以很明显,如果我尝试创建一个到不是环回接口的接口的套接字,我不会得到我的 TCP套接字转发到模拟器,我的 TCP 连接失败。
所以我想知道环回接口上的端口 5000 在向外的网络接口上是否有表亲端口 5000?
我想知道在某个低级别我是否可以从面向外的接口端口 5000 转发到环回接口端口 5000,然后转发到模拟器所在的端口。
这可能吗?
【问题讨论】:
【参考方案1】:你可以使用端口转发软件
例如: 在 Windows 上
stcppipe.exe localhost port port
在 Mac 上
ipfw add fwd localhost,port tcp from any to any port via en0
在 Linux 上
iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132
【讨论】:
【参考方案2】:adb -s emulator-5554 forward tcp:5000 tcp:6000
echo "1" > /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.conf.enp0s31f6.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp --dport 5001 -j DNAT --to 127.0.0.1:5000
sudo iptables -A FORWARD -p tcp -d 127.0.0.1 --dport 5000 -j ACCEPT
【讨论】:
以上是关于我可以从一个接口端口转发到另一个接口端口吗?的主要内容,如果未能解决你的问题,请参考以下文章