Что мне нужно, чтобы добавить виртуальный адаптер IPsec?


8

Я пытаюсь установить соединение IPsec вручную с консоли с iproute2. Что мне нужно, так это виртуальный интерфейс (в лучшем случае виртуального IP-адреса также может быть достаточно), который IPsec преобразует во все времена (ESP / TUNNEL MODE) и передает его в eth0 (в моей системе, называемой em1). На другом наборе одноранговый узел берет пакет из своего собственного расшифровывающего пакета и передает его виртуальному интерфейсу с другой стороны. Поэтому я хочу установить «нормальный» туннель IPsec.

У меня нет проблем с политикой и SA и настройкой, которая была проста, используя обычные адреса Ethernet систем в транспортном режиме, т.е.

ip xfrm policy add src 198.51.100.1 dst 198.51.100.2 dir out tmpl proto esp
ip xfrm state  add src 198.51.100.1 dst 198.51.100.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 198.51.100.2 dst 198.51.100.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

и конфигурация противника на пире работает довольно хорошо.

Теперь я попытался настроить виртуальный IP-адрес и маршрут к другой системе с помощью

ip address add 10.0.0.0 dev em1
ip route add to 10.0.0.2 via 10.0.0.1

и снова наоборот на другой стороне. Это снова работает хорошо. Затем я изменил политику IPsec и SA для

ip xfrm policy add src 10.0.0.1 dst 10.0.0.2 dir out tmpl src 198.51.100.1 dst 198.51.100.2 proto esp mode tunnel
ip xfrm state  add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

Когда я сейчас пытаюсь установить tcpingсоединение, я не получаю ответа и говорю setkey -PD, что политика безопасности никогда не срабатывает. Сейчас я пытаюсь создать работающий виртуальный интерфейс для обработки туннеля IPsec, но я не знаю, как связать его с физическим интерфейсом и как заставить ядро ​​применять политику безопасности.

Это очень важно для меня , что я могу решить эту проблему с iproute2, как я в конечном счете хочу сделать это из программы на C ++ , и я уже соответствующие классы , которые падают Netlink команды в том же стиле ipкоманда делает (то , что я могу сделать с ip, я также можно сделать в моем коде). Фактически, первая часть уже работает из моей программы, и я хочу использовать те же функции Netlink API для остальных.

Обновление Я понял, что необходимо настроить состояние с адресами туннеля, чтобы работающие SA были

ip xfrm state  add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011
ip xfrm state  add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022

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

Итак, одно направление сейчас работает, но я до сих пор не получил ответа. Я также не знаю, является ли проблема еще как-то преобразованием, маршрутизацией или интерфейсной частью. Моим предпочтительным решением по-прежнему будет решение, включающее виртуальный интерфейс, но я понятия не имею, как связать его с физическим, не говоря уже о том, будет ли преобразование работать таким образом.

Ответы:


1

Обычно вы используете туннель, созданный с помощью ip tunnel add. Туннельное устройство предоставляет вам виртуальное устройство, которое инкапсулирует IP-пакеты в другие IP-пакеты. Затем инкапсулированный пакет может быть зашифрован с использованием IPsec.

Например, вы можете создать туннель GRE, используя:

ip tunnel add mytunnel mode gre remote 198.51.100.2
ip addr add 10.0.0.1 peer 10.0.0.2/31 dev mytunnel

Затем вы можете настроить IPSec для шифрования пакетов GRE (либо в целом, либо только для этого места назначения).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.