Назад | Перейти на главную страницу

Почему в этом случае важен порядок команд маршрутизации?

Почему результат отличается между этим

ip tuntap add dev tun1 mode tun
ip link set up tun1
ip route add 1.2.3.4 via 192.168.0.1 dev eth0
ip addr add 10.0.0.1 peer 1.2.3.4 dev tun1

и это (последние две команды поменялись местами)

ip tuntap add dev tun1 mode tun
ip link set up tun1
ip addr add 10.0.0.1 peer 1.2.3.4 dev tun1
ip route add 1.2.3.4 via 192.168.0.1 dev eth0

Первый блок дает таблицу маршрутизации, которая выглядит примерно так

1.2.3.4 via 192.168.0.1 dev eth0
1.2.3.4 dev tun1  proto kernel  scope link  src 10.0.0.1

и последний дает это (и терпит неудачу с "ответами RTNETLINK: файл существует")

1.2.3.4 dev tun1  proto kernel  scope link  src 10.0.0.1

В обоих случаях у меня есть маршрут по умолчанию default via 192.168.0.1 dev eth0.

(Вопрос в некоторой степени связан с моей настройкой VPN. Я использую службу VPN, предоставляемую моим интернет-провайдером. VPN-сервер настроен так, что общедоступный IP-адрес VPN-сервера совпадает с IP-адресом серверной части VPN-туннеля. )

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

Когда вы запускаете VPN, у вас должен быть определенный маршрут к VPN-серверу, в противном случае ваш VPN сломается, если маршрут по умолчанию будет изменен на маршрутизацию через VPN.

Я предполагаю, что это работает ip addr автоматически создаст шлюз по умолчанию, и что этот шлюз по умолчанию конфликтует при запуске ip route команда. При изменении порядка команд сначала должен добавляться маршрут, а затем ip addr команда увидит существующий шлюз для этой сети и не потрудится его настроить.

Вы можете проверить это, сравнив таблицу маршрутизации после запуска только то ip addr команда. Если эта команда добавляет две строки в таблицу маршрутизации, то это источник ошибки.