在我的实验室中,我想设置一个 ssh 跳转主机,它将传入的 ssh 连接转发到通过 USB 连接到它的 Android 设备。所有 Android 设备都已打开 USB 网络共享。网络共享连接会在每个 Android 设备的子网 192.168.42.0/24 中生成一个网络适配器。每个 Android 设备都在不同的端口上运行 ssh 服务器。设置如下图所示:
我的想法是根据端口转发ssh连接。因此,我将网络适配器添加到网桥并通过 iptables 转发连接。为此,我编造了以下内容:
sudo ip link add name ogt type bridge
sudo ip l set eno1 master ogt
sudo ip l set usb0 master ogt
sudo ip l set usb1 master ogt
sudo ip a a 192.168.42.1/24 dev ogt
sudo ip link set ogt up
sudo iptables -t nat -A POSTROUTING -o ogt -j MASQUERADE
sudo iptables -t nat -A POSTROUTING ! -d 192.168.42.0/24 -o eno1 -j SNAT --to-source 172.16.1.100
echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -A PREROUTING -t nat -i eno1 -p tcp --dport 130 -j DNAT --to 192.168.42.130:130
sudo iptables -A FORWARD -p tcp -d 192.168.42.130 --dport 130 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eno1 -p tcp --dport 131 -j DNAT --to 192.168.42.131:131
sudo iptables -A FORWARD -p tcp -d 192.168.42.131 --dport 130 -j ACCEPT
设置有效,但我在跳转主机上没有互联网。不幸的是,我不太明白为什么。我该如何改进转发或者是否有更好的解决方案?我很高兴能得到帮助!
过了一会儿,我开始工作了。我使用 iptables 而不是
adb forward
.因此,启动 adb 以便它侦听所有本地接口:
-a 选项使 adb 侦听所有本地接口。如果您只想在本地工作,请在没有它的情况下启动 adb。
之后用于
adb forward
将传入的 ssh 连接转发到 Android 设备上的相应端口:这会将端口 130/131 上的传入连接转发到相应的 Android 设备。使用
ssh [email protected] -p130
orssh [email protected] -p131
我现在可以连接到所需的设备以下是我用来研究这个问题的一些资源: