我有两个网络接口,一个用于以太网,一个用于 wifi。我想让我的电脑优先使用 wifi 连接(无论何时连接)来访问某些域,其余的都使用以太网电缆连接。
有什么方法可以设置这个/etc/hosts
,resolv.conf
或者其他什么?
答案1
好的,看来我找到了解决方案。
检查已设置了哪些路线:
$ ìp route show
在我的例子中,结果如下:
default via 192.168.0.1 dev enp0s31f6 proto dhcp metric 100
default via 192.168.200.68 dev wlp4s0 proto dhcp metric 600
169.254.0.0/16 dev enp0s31f6 scope link metric 1000
192.168.0.0/24 dev enp0s31f6 proto kernel scope link src 192.168.0.151 metric 100
192.168.200.0/24 dev wlp4s0 proto kernel scope link src 192.168.200.78 metric 600
这里的前两行分别显示了我的以太网(enp0s31f6)和 wifi(wlp4s0)的默认网关。
现在,为了找到我总是被禁止的域名的 IP,我使用dig
以下命令:
$ dig +short a discord.com
162.159.137.232
162.159.135.232
162.159.128.233
162.159.136.232
162.159.138.232
$ dig +short a discord.gg
162.159.136.234
162.159.135.234
162.159.133.234
162.159.134.234
162.159.130.234
然后通过 Wifi 接口为每个目标 IP 添加一条路由(使用我们从第一个命令获得的 Wifi 接口的默认网关):
sudo route add -host 162.159.137.232 gw 192.168.200.68
ETC。
要在 WiFi 连接时自动执行所有这些操作,如果您使用 NetworkManager,则可以将脚本添加到目录中/etc/NetworkManager/dispatcher.d
。例如:
sudo nano /etc/NetworkManager/dispatcher.d/10-bloody-routes
10-
文件名开头的“这里”表示优先级。目录中的脚本在dispatcher.d
网络事件(接口连接、断开连接等)上按字典顺序运行。
我在这里输入了这个 bash 脚本来自动执行上述过程:
#!/bin/bash
if [ "$1" == "wlp4s0" ] && [ "$2" == "up" ]; then
gateway=`ip route | awk '/default/ { print $3 " " $5 }' | awk '/wlp4s0/ { print $1 }'`;
echo "What's up, $gateway: "`date` >> /home/trollkotze/smackmybitch.up;
echo discord.com >> /home/trollkotze/smackmybitch.up;
for x in `dig +short a discord.com`; do
echo route add -host $x gw $gateway >> /home/trollkotze/smackmybitch.up;
route add -host $x gw $gateway >> /home/trollkotze/smackmybitch.up;
done;
echo discord.gg >> /home/trollkotze/smackmybitch.up;
for x in `dig +short a discord.gg`; do
echo route add -host $x gw $gateway >> /home/trollkotze/smackmybitch.up;
route add -host $x gw $gateway >> /home/trollkotze/smackmybitch.up;
done;
fi;
从脚本中可以看出,第一个和第二个参数是接口名称(在我的情况下,我正在寻找wlp4s0
)和事件(我正在寻找up
接口上线时的事件)。我在这里向主目录中的文件添加了一些日志记录,以验证一切是否正常。
每当我连接我的 wifi 时,这个脚本就会运行并通过 wifi 的默认网关将适当的路由添加到 Discord。