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