VPN IPsec LibreSwan: соединение подсети с подсетью

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

Я настраиваю “VPN между подсетями” между двумя серверами Centos 7, используя libreswan. Каждый сервер имеет два сетевых интерфейса, как показано на следующем изображении.

Я хотел бы обеспечить безопасное соединение между подсетями 172.18.0.0/16 и 172.19.0.0/16, устанавливая VPN, используя сеть 172.17.0.0/16, но у меня возникла проблема с разрешением трафика между этими двумя подсетями.

Я следовал официальной документации redhat по https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Securing_Virtual_Private_Networks.html#Site-To-Site_VPN_Using_Libreswan

На данный момент я отключил firewalld на обеих узлах.

Я проверил предварительные условия для ipsec:

[root@node2 ~]# ipsec verify
Проверка установленных системных и конфигурационных файлов

Проверка версии и доступности ipsec                         [OK]
Libreswan 3.8 (netkey) на 3.10.0-123.el7.x86_64
Проверка поддержки IPsec в ядре                    [OK]
 NETKEY: Тестирование значений proc, связанных с XFRM
         ICMP default/send_redirects                    [OK]
         ICMP default/accept_redirects                  [OK]
         XFRM larval drop                               [OK]
Синтаксис pluto ipsec.conf                                 [OK]
Аппаратное устройство генерации случайных чисел                     [N/A]
Найдено два или более интерфейсов, проверка пересылки IP    [OK]
Проверка rp_filter                                      [OK]
Проверка, что pluto работает                          [OK]
 Pluto слушает IKE на udp 500                     [OK]
 Pluto слушает IKE/NAT-T на udp 4500              [OK]
 Синтаксис pluto ipsec.secret                              [OK]
Проверка NAT и MASQUERADEing                          [ТЕСТ НЕЗАВЕРШЕН]
Проверка команды 'ip'                                   [OK]
Проверка команды 'iptables'                             [OK]
Проверка, что команда 'prelink' не мешает FIPS Проверка устаревших опций ipsec.conf                 [OK]
Оппортунистическое шифрование                                [ОТКЛЮЧЕНО]

Содержимое ipsec.conf:

config setup
    protostack=netkey

conn mytunnel
    leftid=@node1
    left=172.17.0.101
    leftrsasigkey=0sAQPXn...        
    rightid=@node2
    right=172.17.0.102
    rightrsasigkey=0sAQPxv...
    authby=rsasig

conn mysubnet
     также=mytunnel
     leftsubnet=172.18.0.0/16
     rightsubnet=172.19.0.0/16
     auto=start

Я запускаю службу ipsec на обоих узлах. Затем я проверяю “ipsec status” (здесь вывод http://pastebin.com/LYA9uqfJ ) и не нахожу никаких ошибок.

Маршрутная таблица узла1:

[root@node1 ~]# route
Маршрутная таблица ядра IP
Назначение     Шлюз         Маска подсети         Флаги Метрика Ссылка Использование Интерфейс
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eno16777736
172.18.0.0      0.0.0.0         255.255.255.0   U     0      0        0 eno33554992

Если я попробую сделать ping с узла1 на IP адрес 172.19.0.101, я получаю ошибку “connect: Network is unreachable”

Не хватает ли чего-то в моей конфигурации? Что я могу попробовать, чтобы разрешить безопасный трафик между этими двумя подсетями?

Проверьте настройки net.ipv4.ip_forward в sysctl.

Или вы можете попробовать запустить tcpdump с обеих сторон и посмотреть, что происходит.

Пример:

tcpdump -n -i интерфейс esp or udp port 500 or udp port 4500

Также попробуйте добавить правила iptables следующим образом:

-A FORWARD -i EXTIF -o INIF -j ACCEPT
-A FORWARD -i INIF -o EXTIF -j ACCEPT
-A POSTROUTING -s YOURNET1 ! -d YOURNET2 -j MASQUERADE

Немного больше деталей о том, что выше:

  • EXTIF это ваш интерфейс 172.17.0.0/16

  • INIF это другой интерфейс 172.18.0.0 или 172.19.0.0

Я использовал это как руководство, моя сеть работает, но не отправляет пакеты keepalive. Strongswan не испытывает проблем

connect: Network is unreachable

С имеющимися маршрутами только к 172.17.0.0/16 и 172.18.0.0/24, нет конкретного маршрута к 172.19.0.0/16, или маршрута по умолчанию, который бы его охватывал, и это причина, по которой вы получаете эту ошибку.

Таким образом, вам нужно добавить либо конкретный маршрут к удалённой подсети, либо добавить маршрут по умолчанию на обоих хостах.

Кстати, вам следует использовать ip route для управления маршрутами вместо route.

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

Чтобы настроить VPN между двумя подсетями (172.18.0.0/16 и 172.19.0.0/16) с использованием Libreswan на серверах CentOS 7, необходимо учесть несколько важных моментов. Давайте разберем ваши детали конфигурации и предложим шаги для устранения возникающих проблем.

1. Проверка конфигурации IP-пересылки

Сначала убедитесь, что на обоих серверах включена IP-маршрутизация. Для этого выполните команду:

sysctl net.ipv4.ip_forward

Значение должно быть 1. Если 0, то включите пересылку с помощью команды:

echo 1 > /proc/sys/net/ipv4/ip_forward

Для постоянного применения изменений добавьте строку в файл /etc/sysctl.conf:

net.ipv4.ip_forward = 1

2. Настройка маршрутов

Ваша таблица маршрутов на node1 показывает, что есть маршруты только в пределах 172.17.0.0/16 и 172.18.0.0/24. Это объясняет ошибку "Network is unreachable", когда вы пытаетесь пинговать адрес в подсети 172.19.0.0/16. Вам необходимо добавить маршруты к другим подсетям на обоих узлах.

Для добавления маршрута в подсеть для node1 выполните следующую команду:

ip route add 172.19.0.0/16 via 172.17.0.102

И наоборот, на node2 добавьте маршрут для подсети 172.18.0.0/16:

ip route add 172.18.0.0/16 via 172.17.0.101

3. Настройка iptables

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

iptables -A FORWARD -i eno16777736 -o eno33554992 -j ACCEPT
iptables -A FORWARD -i eno33554992 -o eno16777736 -j ACCEPT
iptables -A POSTROUTING -s 172.18.0.0/16 -d 172.19.0.0/16 -j ACCEPT
iptables -A POSTROUTING -s 172.19.0.0/16 -d 172.18.0.0/16 -j ACCEPT

Замените eno16777736 и eno33554992 на реальные имена ваших сетевых интерфейсов.

4. Проверка состояния IPsec

Запустите tcpdump на обоих узлах, чтобы убедиться, что пакеты VPN проходят, и избежать блокировок:

tcpdump -n -i <ваш интерфейс> esp or udp port 500 or udp port 4500

Замените <ваш интерфейс> на соответствующий интерфейс, через который должно проходить соединение.

Также убедитесь, что вы правильно настроили все необходимые параметры в файле ipsec.conf. Ваше текущее содержимое выглядит корректно.

5. Состояние IPsec

После выполнения всех вышеперечисленных действий, перезапустите сервис IPsec:

ipsec restart

Проверьте статус соединения с помощью:

ipsec status

Вы должны увидеть активный туннель, который позволит вам пинговать IP-адреса в удаленных подсетях.

Заключение

Следуя данным рекомендациям, вы должны быть в состоянии установить VPN-соединение между двумя подсетями. Если проблема сохраняется, проверьте жесткие ограничения сетевой инфраструктуры и убедитесь в корректности всех настроек.

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

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