Рейтинг:1

Ipsec VPN для AWS: не удается пропинговать конец AWS внутри туннеля

флаг in

Резюме: я думаю, что мне не хватает некоторых маршрутов на моем сервере Ubuntu, подключающемся к AWS VPN с помощью Strongswan Ipsec. Есть идеи, какие маршруты мне нужны на моем сервере?

Я пытаюсь настроить VPN с маршрутизацией BGP с сервера на AWS. У меня это работало со статической маршрутизацией VPN, поэтому я знаю, что моя сторона AWS и ipsec верны. Однако BGP оказывается сложным.

Я использую Strongswan на Ubuntu в качестве «клиентской» стороны. Мои туннели ipsec работают (подтверждено статус ipsec и в консоли AWS). Проблема заключается в том, что мой клиент BGP (frr) не может подключиться к процессу BGP в AWS (и наоборот).

Взяв один из двух туннелей, IP а выглядит так:

5: туннель1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1419 qdisc состояние noqueue НЕИЗВЕСТНО группа по умолчанию qlen 1000
    ссылка/ipip 1.2.3.4 партнер 2.3.4.5
    инет 169.254.10.146 одноранговый узел 169.254.10.145/30 глобальный туннель1
       valid_lft навсегда

Интерфейс создается с помощью скрипта, называемого Strongswan, который выглядит следующим образом:

IP-туннель добавить ${VTI_INTERFACE} локальный ${PLUTO_ME} удаленный режим ${PLUTO_PEER} ключ vti ${PLUTO_MARK_IN_ARR[0]}
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.disable_policy=1
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.rp_filter=2 || sysctl -w net.ipv4.conf.${VTI_INTERFACE}.rp_filter=0
IP-адрес добавить ${VTI_LOCALADDR} удаленный ${VTI_REMOTEADDR} dev ${VTI_INTERFACE}
IP-ссылка установлена ​​${VTI_INTERFACE} до mtu ${MTU}
iptables -t mangle -I FORWARD -o ${VTI_INTERFACE} -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t mangle -I INPUT -p esp -s ${PLUTO_PEER} -d ${PLUTO_ME} -j MARK --set-xmark ${PLUTO_MARK_IN}

У меня есть такой маршрут:

169.254.10.144/30 devтуннель1 ссылка на область ядра прото src 169.254.10.146

Я могу пропинговать свой локальный (клиентский) конец (169.254.10.146), но пинг на удаленном конце говорит:

PING 169.254.10.145 (169.254.10.145) 56 (84) байт данных.
From 169.254.10.146 icmp_seq=1 Целевой хост недоступен

Несмотря на сообщение о том, что он недоступен, я вижу пакет на интерфейсе туннеля, хотя не похоже, что он фактически отправляется по туннелю в AWS (по крайней мере, статистика AWS Cloudwatch не показывает дополнительной активности).

Один из шагов отладки BGP — попытаться подключиться по telnet к соседу (169.254.10.145) через порт 179, но это не удается из-за «нет маршрута к хосту». Любопытно, что я вижу, как AWS пытается подключиться к моему BGP-клиенту в tcpdump на туннельном интерфейсе:

12:49:45.860899 IP 169.254.10.145.43731 > 169.254.10.146.179: флаги [S], seq 857645259, win 26880, параметры [mss 1375,sackOK,TS val 3261400514 ecr 0],nop,wscale 7
12: 49: 45.860931 IP 169.254.10.146.179> 169.254.10.145.43731: флаги [S.], SEQ 2284055933, ACK 857645260, Win 64249, Options [MSS 1379, Sackok, TS Vall 93642871313131313. ECR 3004141414. ], длина 0

Похоже, мой сервер возвращает пакет ACK, но соединение не устанавливается. Если я останавливаю службу BGP, мы начинаем отправлять RST-ответы:

12:52:02.055473 IP 169.254.10.145.43679 > 169.254.10.146.179: флаги [S], seq 2280717367, win 26880, параметры [mss 1375,sackOK,TS val 3261536708 ecr 0],nop,wscale 7
12:52:02.055498 IP 169.254.10.146.179 > 169.254.10.145.43679: Флаги [R.], seq 0, ack 1, win 0, длина 0

Исходя из этого, я предполагаю, что пакет ACK ядра и мой пакет ping проходят через туннельный интерфейс, но на самом деле не попадают в ipsec или не идут в AWS.

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

Рейтинг:0
флаг in

Получается решение - дополнительная политика xfrm. Идея, стоящая за этим, заключается в том, что, пока пакеты попадают на интерфейс, трафик не «подхватывается» ipsec. Для решения проблемы, похоже, нужно пометить пакеты (так же, как мы это делаем в конфиге ipsec и iptables), а также специально "активировать" xfrm политикой. В моем случае было так:

ip xfrm policy add dst 169.254.10.144/30 src 169.254.10.144/30 dir out tmpl src 1.2.3.4 dst 2.3.4.5 proto esp spi 0xc0f93fba reqid 1 режим метка туннеля 0x64

Это делает политику, которая выглядит следующим образом:

источник 169.254.10.144/30 дст 169.254.10.144/30
    приоритет выхода 0
    отметка 0x64/0xffffffff
    tmpl src 1.2.3.4 dst 2.3.4.5
        proto esp spi 0xc0f93fba требуется туннель режима 1

В этом есть некоторая магия, которую, кажется, мы должны получить от существующей политики. Во-первых, это «число spi». Это устанавливается Strongswan, и я не думаю, что это предсказуемо и недоступно в среде, переданной в ipsec-vti.sh. Вместо этого вам нужно будет сделать grep и awk, чтобы вытащить его из политика xfrm ip вывод. Точно так же обязательный - этот набор с 1 для первого интерфейса и 2 для второго, который создается - к сожалению, тоннель 1 не всегда является первым, поэтому вам также нужно будет вытащить это число.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.