Вопрос или проблема
Я настраиваю “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-соединение между двумя подсетями. Если проблема сохраняется, проверьте жесткие ограничения сетевой инфраструктуры и убедитесь в корректности всех настроек.