我已通过 USB 将启用了热点的 iPhone 连接到我的 ubuntu 机器。
根据网络活动的类型(例如浏览与 ssh),我想在网络连接之间切换(USB 有线与 LAN)。
是否有一个命令可以让我即时切换?
编辑:我正在寻找一个更简单的解决方案,只需一个无需拔出电缆即可替换的解决方案。
我的会话是分开的。这实际上是——嘿,我必须查看我的个人电子邮件,但我不想在我的公司服务器上这样做。所以,我正在寻找这样的解决方案
答案1
通常当我遇到这种情况时,我会使用静态路由来划分流量。但这取决于您是否知道要连接的站点。但可以很容易地将其制作成可在需要时执行的脚本,并且更改不会改变。
这里的技巧是确定哪个接口应该是默认路由,然后为要采用另一条路径的目的地添加静态路由。我使用知识产权这个命令非常简单。
ip route 通过 192.168.10.1 添加 1.3.3.7/32
ip route 通过 192.168.10.1 添加 1.4.4.0/24
一个更先进、更持久的解决方案是iptables,这也允许您使用更细粒度的规则。请查看这指南,我不会做你要求的事情,但它包含了如何使用 iptables 进行多网关平衡的基础知识。
答案2
用户空间不应能够选择其使用的路由。如果您只想使用一个路由进行 SSH 流量,另一个路由进行 HTTP 流量,请执行以下操作。请注意,使用以下方法是因为我们正在基于第 4 层目标地址进行路由。如果仅基于 IP,您只需添加额外的路由即可。
不要忘记根据需要替换 IP 地址、端口号和接口名称。我有 udev 规则,可以根据 MAC 地址重命名到 iPhone 的链接。您可能不会这样做,它可能会显示为另一个 eth* 设备。只要表和标记号与现在一样一致,就可以更改它们。
创建路由表和每个链接都有一个默认网关。
ip route add 172.20.10.0/24 dev iphone0 table 1234 ip route add default via 172.20.10.1 dev iphone0 table 1234 ip route add 192.0.2.0/24 dev eth0 table 4321 ip route add default via 192.0.2.1 dev eth0 table 4321
由于 IP 路由规则仅那,IP 层,使用 iptables 标记要发往哪个链接的流量。注意它是如何预路由。
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
创建路由规则以处理多个默认网关的情况。这些必须放在首位,因为它们会强制流量从其来源的同一接口返回,而不是从另一个接口返回(例如,如果您更改了 SSH 流量应使用的接口)。
ip rule add from 172.20.10.2 table 1234 priority 1000 ip rule add from 192.0.2.2 table 4321 priority 1001
(可选,除非一个子网上的流量无法由另一个子网上的网关路由 - 例如,或许RFC 1918 流量)创建路由规则以强制到您直接连接的子网的流量通过适当的接口,而不管您指定用于特定流量类型的链接是什么。
ip rule add to 172.20.10.0/24 table 1234 pref 1002 ip rule add to 192.0.2.0/24 table 4321 pref 1003
创建路由规则
ip rule add fwmark 1 table 1234 pref 1004 ip rule add fwmark 2 table 4321 pref 1005
为所有其他流量设置默认网关。
ip route add default via 192.0.2.1 dev eth0 # implicit "table main" here
至于动态更改使用的连接,官方存储库中不应该有命令(如果有的话)。您必须编写一个脚本,该脚本只会从 RPDB 读取现有规则,计算“相反”表,删除旧规则,并为标记流量制定使用另一个表的规则。例如:
#! /bin/sh
case $1 in
ssh) PREF=1004
http) PREF=1005
*) echo "Unknown." 1>&2; exit 1
esac
TABLE=`ip rule list | grep ^$PREF: | awk '{print $NF}' | rev`
ip rule del pref $PREF
ip rule add fwmark 1 table $TABLE pref $PREF
这里,上面的桌号选择很重要,因为我使用了一个廉价的技巧来“切换”桌号。
由于我手边没有所需的东西,因此没有进行测试。
上述内容可以推广到具有两个链接和不同寻址方案的其他情况。
此外,如果您使用的是 OpenSSH,它有一个标志来指定要绑定到的地址。-b
由于上面的设置规则是根据源地址进行路由的,因此您只需执行或其他地址来选择要采用的路由。我不知道任何主流浏览器都允许用户设置绑定地址。ssh -b insert_iphone_address_here [email protected]