Маршрутирование исходящего трафика по беспроводной сети, маршрутирование входящего трафика по проводной сети.

Вопрос или проблема

У меня есть два сетевых интерфейса (eno1 и wls4) на одном физическом компьютере, работающем под управлением Ubuntu 22.04. У eno1 есть публичный статический IP-адрес xxx.xxx.xxx.xx, а wls4 будет использовать DHCP. Оба сетевых интерфейса предоставляют соединение с Интернетом, хотя и через две разные сети.

Компьютер обслуживает веб-сайты (для широкой аудитории Интернета) по публичному статическому IP-адресу (xxx.xxx.xxx.xx), но не может / не должен устанавливать исходящие соединения с Интернетом через эту сеть (на eno1).

Соединение с Интернетом на wls4 предназначено для того, чтобы компьютер мог подключаться к Интернету (для обновлений, доступа к API и т.д.), но не должен принимать никакой входящий трафик.

Как мне маршрутизировать ТОЛЬКО исходящий трафик через wls4, но оставить входящий трафик (включая SSH) нетронутым через eno1? Компьютер хостит веб-сайты и услуги, поэтому соединения через eno1 не могут быть затронуты.

Согласно моему собственному чтению и исследованию, у меня складывается впечатление, что мне не обязательно маршрутизировать входящие соединения на eno1 (и мне нужно только маршрутизировать исходящий трафик на wls4?)? Когда соединение инициируется на моем публичном статическом IP, оно должно сохраняться? Но я не знаю, как направить трафик наружу через wls4, не нарушая моего текущего соединения на eno1. Когда я активирую wls4 и eno1 одновременно, я не могу подключиться по SSH к публичному статическому IP или получить доступ к веб-сайтам, размещенным на этом IP.

Вот вывод, который я получаю от route -n, когда у меня подключены оба интерфейса:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.1   0.0.0.0         UG    0      0        0 eno1
10.249.0.0      0.0.0.0         255.255.0.0     U     600    0        0 wls4
xxx.xxx.xxx.0   0.0.0.0         255.255.255.128 U     0      0        0 eno1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.19.50.39    0.0.0.0         255.255.255.255 UH    600    0        0 wls4
172.19.215.140  0.0.0.0         255.255.255.255 UH    600    0        0 wls4
192.168.16.0    0.0.0.0         255.255.240.0   U     0      0        0 docker_gwbridge

ИЗМЕНЕНИЕ

Я перенес свои маршруты wls4 в отдельную таблицу маршрутизации и добавил правило политики маршрутизации, которое выбирает эту таблицу для любых пакетов, отправленных с моего IP-адреса wls4. Но по какой-то причине я все равно не могу заставить Linux использовать wls4 для исходящих соединений. (Если я выполню curl ifconfig.me –interface <wls4_ip_address>, я смогу подключиться, значит, соединение wls4 работает).

Мой текущий вывод route -V:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.1        0.0.0.0         UG    0      0        0 eno1
xxx.xxx.xxx.0   0.0.0.0         255.255.255.128 U     0      0        0 eno1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-4ee50e2ba8a2
192.168.16.0    0.0.0.0         255.255.240.0   U     0      0        0 docker_gwbridge

Вывод команды ip rule list:

0:  from all lookup local
400:    from 10.249.21.247/16 lookup wls4
32766:  from all lookup main
32767:  from all lookup default

И вывод команды ip route list table wls4:

default via 10.249.0.1 dev wls4
10.249.0.1 dev wls4 scope link
172.19.50.39 via 10.249.0.1 dev wls4
172.19.215.140 via 10.249.0.1 dev wls4

Я не совсем уверен, что я пропустил, и буду признателен за любую помощь!

(Шаг 0: Получите вторую сетевую карту вместо того, чтобы запускать сервер по Wi-Fi?)

Скопируйте (или перенесите) свои маршруты wls4 в альтернативную таблицу маршрутизации. Не уверен, есть ли такая опция у netplan (должна быть, потому что ее бэкенд systemd-networkd определенно это поддерживает), но если вы сделаете это вручную:

ip -4 route add default via <gw> dev wls4 table 444

(Если это окажется неосуществимым, вы можете сделать все наоборот и переместить маршрут eno1 вместо этого – не имеет значения, какой.)

Добавьте правило политики маршрутизации, которое выбирает эту таблицу для любых пакетов, отправленных с вашего IP-адреса wls4 (как выше, не уверен насчет netplan, но systemd-networkd может создавать правила политики):

ip -4 rule add pref 400 from <ip>/32 lookup 444

Это, как правило, нарушает доступ к локальной подсети, так как таблица 444 больше не имеет вашего маршрута “локальной /24 подсети”. Чтобы компенсировать это, вы можете либо а) добавить специальное правило ‘throw’, которое будет передаваться в основную таблицу:

ip -4 route add throw 192.168.1.0/24 table 444

либо б) добавить еще одно правило политики маршрутизации, которое проверяет основную таблицу на доступ к локальной подсети (т.е. всему, кроме основного маршрута):

ip -4 rule add pref 100 from any lookup main suppress_prefixlen 0

Ответ или решение

Для настройки маршрутизации так, чтобы исходящий трафик отправлялся через беспроводную сеть (wls4), а входящий трафик оставался без изменений на проводной сети (eno1), вам нужно будет создать отдельную таблицу маршрутизации и правила для обозначения, какой трафик должен маршрутизироваться через какую сеть. Описание процесса приведено ниже:

Шаг 1: Создание отдельной таблицы маршрутизации

Сначала создайте новую таблицу маршрутизации. Обычно это можно сделать, добавив соответствующую запись в файл /etc/iproute2/rt_tables. Например, добавьте строку, чтобы создать таблицу с именем wls4 с идентификатором 100:

echo "100 wls4" | sudo tee -a /etc/iproute2/rt_tables

Шаг 2: Добавление маршрутов в новую таблицу

Теперь добавьте маршруты для интерфейса wls4 в новую таблицу. Предположим, что ваш шлюз для wls4 — это 10.249.0.1. Выполните следующие команды:

sudo ip route add default via 10.249.0.1 dev wls4 table wls4
sudo ip route add 10.249.0.0/16 dev wls4 table wls4

Шаг 3: Создание правил маршрутизации

Добавьте политику маршрутизации, которая будет использовать новую таблицу для исходящего трафика от IP-адреса вашего интерфейса wls4. Этот IP-адрес вы можете получить с помощью команды ip a. Например, если IP-адрес wls4 — это 10.249.21.247, добавьте следующее правило:

sudo ip rule add from 10.249.21.247 lookup wls4

Шаг 4: Обработка локального трафика

Если вы хотите, чтобы локальный трафик продолжал работать через основной интерфейс (eno1), вам нужно убедиться, что записи о локальных IP-адресах остаются в основной таблице маршрутизации. Для этого можно добавить правило, используя suppress_prefixlen:

sudo ip rule add pref 100 from any lookup main suppress_prefixlen 0

Шаг 5: Проверка конфигурации

После выполнения вышеперечисленных шагов проверьте свою таблицу маршрутизации и правила, чтобы убедиться, что все настроено правильно:

ip route show table wls4
ip rule show

Шаг 6: Автоматизация при загрузке

Для того чтобы эти настройки применялись автоматически при загрузке системы, вы можете добавить команды в сценарии, которые выполняются при загрузке, или использовать утилиты управления сетевыми конфигурациями типа netplan. Если вы используете netplan, найдите конфигурационные файлы в /etc/netplan/ и внесите изменения, чтобы включить новые таблицы и правила.

Примечание

Обратите внимание, что для успешной работы SSH и других входящих соединений вам не нужно изменять маршрутизацию для интерфейса eno1. Все входящие соединения должны поступать через него, и благодаря этому соединения будут продолжать работать как ожидалось. Если будут возникать проблемы, возможно, стоит проверить файерволл или другие настройки безопасности, которые могут блокировать доступ.

После этих шагов у вас должна получиться конфигурация, которая позволяет исходящему трафику уходить через сетевой интерфейс wls4, в то время как входящий трафик через интерфейс eno1 остается доступным и не нарушается.

Оцените материал
Добавить комментарий

Капча загружается...