Я использую mininet, я создал туннель ESP между двумя машинами, так что если я пингую с одной машины на другую, я вижу пакеты ESP, и все работает нормально. Вот используемые команды:
M1 ip xfrm policy add dir out src 2001:0:0:1c::2 dst 2001:0:0:1c::1 tmpl proto esp mode transport
M1 ip xfrm state add src 2001:0:0:1c::2 dst 2001:0:0:1c::1 proto esp spi 1 enc 'cbc(aes)' 0x3ed0af408cf5dcbf5d5d9a5fa806b224 mode transport
M2 ip xfrm policy add dir in src 2001:0:0:1c::2 dst 2001:0:0:1c::1 tmpl proto esp mode transport
M2 ip xfrm state add src 2001:0:0:1c::2 dst 2001:0:0:1c::1 proto esp spi 1 enc 'cbc(aes)' 0x3ed0af408cf5dcbf5d5d9a5fa806b224 mode transport
Теперь я пытаюсь сделать следующее:
У меня есть 2 машины, скажем, M1 и M3, которые являются удаленными (или smt, например M1 -> M2 -> M3), и я просто меняю соответствующие src и dst с помощью адреса ipv6, но в этом случае туннель больше не работает, я имею в виду, что при просмотре пакетов на wirehark заголовок ESP отсутствует. Даже если я оставлю код, как указано выше, пакеты между M1 и M2 все еще без заголовка ESP.
Моя цель состоит в том, чтобы установить связь IPsec между M1 и M3, поэтому, если я отправлю эхо-запрос от M1 к M3, будут пакеты ESP между M1 и M3 и пакет между MC2 и MC3. Как я могу это реализовать? Любая помощь приветствуется, заранее спасибо.
Сначала оговорка: установка ключей шифрования вручную идеально подходит для демонстрационных целей, но и АЙК демон как сильный сделает это лучше и не сложнее настроить.
Команды, которые вы использовали в своем вопросе, подразумевают, что:
Поэтому, если вы хотите установить двунаправленный зашифрованный канал, вам необходимо создать spi и ключ шифрования для обоих направлений:
host1="2001:0:0:1c::2"
host2="2001:0:0:1c::1"
key12=0x$(xxd -c 32 -l 32 -ps /dev/random)
key21=0x$(xxd -c 32 -l 32 -ps /dev/random)
spi12=0x$(xxd -c 4 -l 4 -ps /dev/random)
spi21=0x$(xxd -c 4 -l 4 -ps /dev/random)
Затем вам необходимо установить ключи шифрования на оба хоста:
ip xfrm state add src $host1 dst $host2 proto esp spi $spi12 enc 'cbc(aes)' $key12 mode transport
ip xfrm state add src $host2 dst $host1 proto esp spi $spi21 enc 'cbc(aes)' $key21 mode transport
После установки ключей вы можете добавить политики, чтобы Linux начал шифрование данных. Инструкции различаются для разных хостов (очевидно), потому что направления в и вне разные. На M1 нужно использовать:
ip xfrm policy add dir out src $host1 dst $host2 tmpl proto esp mode transport
ip xfrm policy add dir in src $host2 dst $host1 tmpl proto esp mode transport
на М2:
ip xfrm policy add dir in src $host1 dst $host2 tmpl proto esp mode transport
ip xfrm policy add dir out src $host2 dst $host1 tmpl proto esp mode transport
Теперь ядро начнет шифрование исходящих пакетов и отбрасывает незашифрованные входящие пакеты.
Если что-то не работает, проверьте, пропускают ли брандмауэры ESP.
PS: Вы можете найти более полное решение на блог Валднера.