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