иногда мне нужно подключаться к веб-сайтам без прохождения VPN, возможно ли открыть экземпляр Firefox и сказать ему использовать простой интерфейс eth0
вместо tun0?
3 ответа
сетевые правила с ip route и iptables не могут использовать имя программы в качестве критерия
Если вам нужно направлять трафик на другой интерфейс только для Firefox, а не для какого-либо запроса на порт 80, вы можете использовать сетевые пространства имен в новейших ядрах. Они ограничивают доступные системные ресурсы для процесса ("ip netns")
Вот введение с похожим примером:
http://www.dasblinkenlichten.com/an-introduction-to-network-namespaces/
Я делал нечто подобное с iptables некоторое время назад. Основное различие между вашей целью и моим проектом заключалось в том, что я пытался перенаправить весь трафик, поступающий из сети, на tun0. Никаких изменений в Firefox не требуется. Суть этого заключается в следующем:
- Пользовательская запись в
rt_tables
создается для обработки определенных пакетов - Все пакеты, предназначенные для порта 80 или определенного IP, отмечены
- Все пакеты, соответствующие метке на шаге 2, передаются в таблицу rt_table, указанную на шаге 1.
- Пакеты в новых
rt_tables
должны иметь другой шлюз, чем остальные - IP-адрес eth0
Я нашел свой старый код, который должен работать для вас как есть, или с небольшими изменениями. Это слегка измененный набор кода, который я использовал для запуска на своем шлюзе:
# Create the new custom router table
echo 201 CustomRouter >> /etc/iproute2/rt_tables
# Mark the desired packets for special treatment
iptables -t mangle -A PREROUTING -d 123.123.123.123 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -d 123.123.123.123 -j MARK --set-mark 2
# Assign marked packets to CustomRouter
ip rule add fwmark 2 table CustomRouter
# Set the gateway
ip route add default via 192.168.0.123 dev eth0 table ClientRouter
Выше предполагается, что 123.123.123.123
- это IP-адрес веб-сайта, который вы хотите через eth0, а 192.168.0.123
- это IP-адрес eth0
. Измените две строки с этим IP-адресом так, чтобы он совпадал с любым, будь то все на порте 80 или только один конкретный IP-адрес. 123.123.123.123
- это просто поддельный IP, который я использовал для проверки этого.
Обратите внимание, что строка, которая создает CustomRouter
в rt_tables
, не должна выполняться каждый раз. Скрипт Perl, из которого я извлек это, имеет проверку, чтобы увидеть, есть ли он там, поэтому я считаю, что это может быть сделано только один раз, или, возможно, один раз при каждой загрузке.
Вы можете добавить маршруты для любых сайтов, которые вы хотите пройти через eth0, например:
ip route add websiteIP via gatewayIP dev eth0
Здесь вы добавляете IP-адрес веб-сайта, который вы хотите посетить на websiteIP
IP, и добавляете ваш обычный IP-адрес шлюза на gatewayIP
.