У меня есть два сетевых интерфейса для Ethernet и Wi-Fi. Я хотел бы сказать своему компьютеру, чтобы он предпочитал использовать подключение Wi-Fi (всякий раз, когда он подключен) для доступа к определенным доменам, и использовать подключение кабеля Ethernet n для всего остального.
Можно ли как-нибудь настроить эту игру с / etc / hosts
, resolv.conf
или чем-то еще?
Хорошо, похоже, я нашел решение.
Проверьте, какие маршруты настроены:
$ ì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
Первые две строки здесь показывают шлюзы по умолчанию для моего Ethernet (enp0s31f6) и Wi-Fi (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
Затем добавляю маршрут для каждого из этих IP-адресов назначения через интерфейс Wi-Fi (используя шлюз по умолчанию интерфейса Wi-Fi, полученный с помощью первой команды):
sudo route add -host 162.159.137.232 gw 192.168.200.68
и т. д.
Чтобы делать все это автоматически при каждом подключении Wi-Fi, если вы используете 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
], когда интерфейс переходит в оперативный режим).
Я добавил сюда запись в файл в моем домашнем каталоге, чтобы убедиться, что все работает.
Теперь, когда я подключаю свой Wi-Fi, этот скрипт запускается и добавляет соответствующие маршруты в Discord через шлюз Wi-Fi по умолчанию.