Не удается выполнить ping второго IP-адреса на интерфейсе другой машины.

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

У меня есть клиент OpenVPN, подключенный к серверу OpenVPN.

На сервере есть следующие маршруты:

default via 10.109.185.65 dev eth0 proto dhcp src 10.109.185.84 metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
10.109.185.64/27 dev eth0 proto kernel scope link src 10.109.185.84
10.109.185.65 dev eth0 proto dhcp scope link src 10.109.185.84 metric 100

У клиента есть следующий адрес на виртуальном интерфейсе tun0, созданном OpenVPN:

11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
    inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::3c55:91d1:e8cf:7c55/64 scope link flags 800
      valid_lft forever preferred_lft forever

С сервера я могу пинговать клиента, выполнив ping 10.8.0.3, и это работает нормально.

Затем я добавил второй IP-адрес к tun0 на клиенте, выполнив ip addr add 10.100.1.2/24 dev tun0. Он отображается на интерфейсе tun0 как:

inet 10.100.1.2/24 scope global tun0
   valid_lft forever preferred_lft forever

На сервере я добавил маршрут для этой подсети, выполнив ip route add 10.100.1.0/24 dev tun0. Он отображается в списке маршрутов как:

10.100.1.0/24 dev tun0 scope link

Но попытка выполнить ping 10.100.1.2 на сервере не удалась.

Затем я заметил, что на сервере и клиенте были следующие правила iptables FORWARD:

ACCEPT     all  --  10.8.0.0/24          anywhere

Так что я добавил еще одно правило FORWARD для подсети 10.100.1.0, выполнив iptables -A FORWARD -s 10.100.1.0/24 на сервере и клиенте.

Но попытка выполнить ping 10.100.1.2 на сервере по-прежнему не удалась.

Есть ли что-то еще, что мне нужно сделать, чтобы иметь возможность пинговать 10.100.1.2 с сервера?

Три вещи, которые следует учитывать:

1. Маршрутизация

Второй IP-диапазон (10.100.1.0/24) будет напрямую связан с интерфейсом tun0. Поэтому ваша машина будет знать, как добраться до сети 10.100.1.0/24 без необходимости добавлять какие-либо статические маршруты. Вскоре после добавления второго IP выполните следующую команду, и вы увидите, что маршрут был динамически добавлен в таблицу.

$ sudo ip route show

2. Точка-точка сеть

Когда вы создаете VPN-туннель, вы создаете сеть точка-точка, используя виртуальный сетевой адаптер (tun0 в данном случае) между VPN-сервером и клиентом. Присвоение второго или третьего адреса этой интерфейсу усложняет точка-точка.

3. Решение

Создайте новый виртуальный сетевой адаптер, которому вы присвоите второй желаемый IP-адрес. Никакие операторы маршрута не потребуются, если они не нужны. Также не потребуются дополнительные правила iptables. (Вы должны удалить статические маршруты, которые вы создали ранее, а также удалить дополнительное правило iptables. Вам ничего из этого не нужно, чтобы ваша система работала)

С VPN-сервера:

$ lsmod | grep dummy

Вышеупомянутая команда проверяет, загружены ли в ядре сетевые драйверы (модули) “dummy”. Если не загружены, проверьте документацию здесь

$ sudo ip link add tun99 type dummy
$ sudo ip link set dev tun99 up

Вышеупомянутая команда создаст новый виртуальный сетевой адаптер с именем tun99

$ sudo ip address change dev tun99 10.100.1.1

Вышеупомянутая команда присвоит IP-адрес 10.100.1.1/32 вновь созданному сетевому адаптеру tun99

Поскольку это сеть точка-точка, операторы маршрутады не потребуются

С VPN-клиента:

$ sudo ip link add tun99 type dummy
$ sudo ip link set dev tun99 up
$ sudo ip address change dev tun99 10.100.1.2

Проверьте соединение, отправив запросы ping с VPN-клиента к IP-адресу VPN-сервера 10.100.1.1

$ ping 10.100.1.1

 iptables -A FORWARD -s 10.100.1.0/24

Если эта команда не включала -j ACCEPT, все, что вы сделали, это добавили счетчик трафика для измерения количества пакетов+байтов, соответствующих сети 10.100.1.0/24, достигающей этой точки в наборе правил. Если вы укажете правило без действия, оно просто останется там, посчитает пакеты, соответствующие правилу, и больше ничего не сделает.

Кроме того, опция -A добавляет новое правило в конец существующего набора правил в таблице; правила обрабатываются по порядку, и если в качестве последнего правила таблицы было правило “запретить все” (что является общепринятой рекомендацией), никакие правила после него не будут иметь эффекта. Если это так, вы должны были вставить новое правило в более подходящее место.

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

Проблема: Невозможность выполнить ping на второй IP-адрес на интерфейсе другой машины

Введение

Связь между клиентом OpenVPN и сервером имеет свои особенности, которые могут повлиять на выполнение команд, таких как ping. В данной ситуации клиент успешно пингует сервер, но при добавлении второго IP-адреса (10.100.1.2) в виртуальный интерфейс tun0 на клиенте, сервер не может пинговать этот адрес. Давайте рассмотрим возможные причины и решения этой проблемы.


1. Роутинг

При добавлении второго IP-адреса к интерфейсу tun0, ваши маршруты должны обновиться автоматически. Однако необходимо убедиться, что маршрут на сервере правильно настроен:

$ sudo ip route show

Убедитесь, что маршрут для подсети 10.100.1.0/24 присутствует. Если маршруты не динамически обновлены, вам может потребоваться вручную внести изменения.

2. Точка-точка

Следует помнить, что туннелирование через VPN создает точку-точку (point-to-point) соединение. Убедитесь, что для этой конфигурации используется уникальный адрес, и что оба IP-адреса (на клиенте и сервере) правильно настроены.

3. Правила iptables

Правила фильтрации пакетов (iptables) могут блокировать пакеты передаваемые между клиентом и сервером. Добавляя правило с помощью команды:

iptables -A FORWARD -s 10.100.1.0/24 -j ACCEPT

Убедитесь, что вы указываете действие -j ACCEPT. Если это правило просто добавит счетчик, оно не разрешит пакеты, и следовательно, поток данных будет заблокирован.

Рекомендации по решению проблемы

  1. Проверьте правила iptables. Убедитесь, что ваши правила корректны и что у вас нет запретов, которые могут блокировать трафик.

  2. Создайте новый виртуальный интерфейс. Вместо добавления дополнительных IP-адресов к интерфейсу tun0, создайте новый виртуальный интерфейс. Это позволит избежать путаницы с маршрутизацией и не потребует дополнительных настроек маршрутов.

    Пример для создания нового интерфейса dummy:

    # На сервере
    sudo ip link add tun99 type dummy
    sudo ip link set dev tun99 up
    sudo ip addr add 10.100.1.1/32 dev tun99
    
    # На клиенте
    sudo ip link add tun99 type dummy
    sudo ip link set dev tun99 up
    sudo ip addr add 10.100.1.2/32 dev tun99
  3. Проверьте настройки. После создания новых интерфейсов, проверьте связь между ними, выполнив команду ping с клиента на сервер.

ping 10.100.1.1

Заключение

Если несмотря на указанные действия проблема с ping сохраняется, стоит проверить иные аспекты настройки сети, включая конфигурации DHCP и правила NAT. Спустя несколько шагов настройки вы сможете убедиться, что ваша сеть функционирует правильно, и все необходимые пакеты свободно перетекают между клиентом и сервером. Не забывайте также перезагрузить iptables или перезапустить сетевые службы после внесения изменений, чтобы они вступили в силу.

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

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