在我的实验室中,我想设置一个 ssh 跳转主机,将传入的 ssh 连接转发到通过 USB 连接到它的 Android 设备。所有 Android 设备都已启用 USB 网络共享。网络共享连接在子网 192.168.42.0/24 中为每个 Android 设备生成一个网络适配器。每个 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
设置成功了,但是我在跳转主机上没有网络。不幸的是,我不太明白为什么。我该如何改进转发,或者是否有更好的解决方案?如果能得到帮助,我将非常高兴!
答案1
过了一会儿,我让它工作了。我使用 而不是 iptables adb forward
。
因此,启动 adb 以便它监听所有本地接口:
sudo adb -a nodaemon server start
-a 选项使 adb 监听所有本地接口。如果您只想在本地工作,则无需使用该选项即可启动 adb。
之后使用adb forward
将传入的 ssh 连接转发到 Android 设备上的相应端口:
adb -s [serialDevice#1] forward tcp:130 tcp:130
adb -s [serialDevice#2] forward tcp:131 tcp:131
这会将端口 130/131 上的传入连接转发到相应的 Android 设备。使用或现在我可以连接到所需的设备ssh [email protected] -p130
ssh [email protected] -p131
以下是我用来研究此问题的一些资源: