Маршрутизация Linux не обрабатывает доменные имена

Маршрутизация Linux не обрабатывает доменные имена

Интересно, есть ли у меня VPS с 2 сетевыми интерфейсами (1.1.1.1 и 2.2.2.2), и 1.1.1.1 установлен как основной...

eth0 = 1.1.1.1
eth0:1 = 2.2.2.2

Теперь я хочу направить весь трафик для domain.com (я не знаю домена, если он использует Cloudflare) через IP 2.2.2.2 eth0:1

пример1:

если я запущу его, wget domain.comон пройдет через 2.2.2.2 eth0:1,
но если я запущу его, wget google.comон пройдет через 1.1.1.1 eth0

ex2:

если я перейду на "whatismyip.com", чтобы пройти через eth0, то он покажет, что мой IP - "1.1.1.1",
но если я перейду на "whatismyipaddress.com", то это будет pass-thru eth0:1, то он покажет, что мой IP - "2.2.2.2".

решение1

Необходимо учесть несколько моментов:

Маршрутизация Linux не обрабатывает доменные имена

Существует множество вариантов конфигурации маршрутизации на Linux, но ни один из них не принимает голые доменные имена. В конце концов, мы говорим об IP-маршрутизации. Поэтому правила должны быть определены для IP-адресов, которые, очевидно, «сломаются» при изменении DNS-записи(й) домена.

Предпочтения интерфейса

В этом случае есть 2 интерфейса, предоставляющих маршрут к одной и той же подсети (0.0.0.0/0, также известной как Интернет). Чтобы указать ядру предпочесть определенный интерфейс, нам нужно применить маршрутизацию на основе политик (PBR).

Как следует из названия, маршрутизация на основе политик работает, определяя политику (т. н. «правило»), чтобы определить, какой интерфейс использовать. Без политик ядро ​​выберет первый маршрут, соответствующий сети назначения.

Маршруты, правила, таблицы

Ядро использует маршруты для определения того, как обрабатывать пакеты. Маршрут — это простое определение, которое включает адрес назначения и ссылку (интерфейс) для использования.

Маршруты сгруппированы в tables, а то, какая таблица используется, зависит от определенных политик.

A policy(или правило) сообщает ядру, какую таблицу проверять для маршрутизации пакетов. Определение политики включает источник пакета, назначение и таблицу маршрутизации для проверки.

Отображение текущих маршрутов и политик

Чтобы отобразить маршруты, используемые в данный момент системой, выполните ip route

Это показывает все записи в mainтаблице маршрутизации. Доступ к другим таблицам можно получить, запустив ip route show table <tablename>.

Чтобы отобразить используемые в данный момент политики, выполните ip rule

Это список всех политик/правил, используемых ядром. Они перебираются сверху вниз, пока одно правило не будет соответствовать обрабатываемому пакету.

Пример

echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1

Эти команды создадут новую таблицу маршрутизации out1и добавят 10.0.0.1в качестве шлюза для доступа в Интернет. Трафик, идущий на 3.4.5.6(который необходимо заменить на фактический, разрешенный IP-адрес целевого домена), будет отправлен через шлюз по умолчанию, определенный в out1таблице, с использованием указанного устройства eth0и IP 1.1.1.1.

Я бы рекомендовал прочитать некоторые существующие руководства и руководства, чтобы ознакомиться с терминологией. Найдите iproute2и linux advanced routing and traffic control.

И последнее, но не менее важное: протестируйте свои изменения перед применением их в работающей системе. Ошибки случаются, лично я предпочитаю поджарить виртуальную машину вместо удаленного сервера.

Связанный контент