Назад | Перейти на главную страницу

При подключении EC2 VPC к OpenVPN весь маршрутизируемый трафик теряется

Я пытаюсь использовать OpenVPN в Amazon Linux для подключения локальной сети к VPC на EC2. У меня есть трафик, идущий от экземпляра OpenVPN на любой компьютер в локальной сети, но другие машины в VPC не видят трафик из локальной сети.

Вот урезанная версия сети:

       Local network          /        EC2 VPC, 10.2.0.*/255.255.255.0
  10.1.0.*/               ,'
     255.255.255.0     ,'
                      .'
                      |
 +---------------+   |             
 | OpenVPN on    |   |             
 |   firewall    XXX |   +---------------+
 | 10.1.0.1      |  XXXX | OpenVPN server|
 +------`.-------+   \  XX  10.2.0.10  `-.    +-------------+
          \          '.  +---------------+  `-. Second server
  +--------`.---+     |                       | 10.2.0.12   |
  |Local server |      \                      +-------------+
  | 10.1.0.3    |       \
  +-------------+        \

С сервера EC2 OpenVPN:

[root@ip-10-2-0-10 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.2.0.1        0.0.0.0         UG    0      0        0 eth0
10.1.0.0        10.1.2.5        255.255.255.0   UG    0      0        0 tun0
10.1.2.0        10.1.2.5        255.255.255.0   UG    0      0        0 tun0
10.1.2.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.2.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

[root@ip-10-2-0-10 ~]# ping -c 2 10.1.0.3
PING 10.1.0.3 (10.1.0.3) 56(84) bytes of data.
64 bytes from 10.1.0.3: icmp_seq=1 ttl=127 time=488 ms
64 bytes from 10.1.0.3: icmp_seq=2 ttl=127 time=54.9 ms

--- 10.1.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1056ms
rtt min/avg/max/mdev = 54.925/271.767/488.609/216.842 ms

Из брандмауэра LAN:

root@firewall:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.xxx 0.0.0.0         UG    0      0        0 eth0.2
10.1.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br-lan
10.1.2.0        10.1.2.2        255.255.255.0   UG    0      0        0 tun0
10.1.2.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.2.0.0        10.1.2.2        255.255.255.0   UG    0      0        0 tun0

Со Второго сервера на EC2:

[root@ip-10-2-0-12 ~]# ping -c 3 10.1.0.3
PING 10.1.0.3 (10.1.0.3) 56(84) bytes of data.

--- 10.1.0.3 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 12014ms

Однако вот в чем дело. Выполнение tcpdump на сервере EC2 OpenVPN показывает, что весь трафик проходит должным образом:

[root@ip-10-2-0-10 ~]# tcpdump -i eth0 -n host 10.1.0.3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:46:58.779826 IP 10.2.0.12 > 10.1.0.3: ICMP echo request, id 21846, seq 1, length 64
13:46:58.852756 IP 10.1.0.3 > 10.2.0.12: ICMP echo reply, id 21846, seq 1, length 64
13:46:59.787467 IP 10.2.0.12 > 10.1.0.3: ICMP echo request, id 21846, seq 2, length 64
13:46:59.847424 IP 10.1.0.3 > 10.2.0.12: ICMP echo reply, id 21846, seq 2, length 64

Tcpdump на втором сервере на EC2 показывает только эхо-запрос и никаких ответов.

Похоже, что этот трафик отбрасывается Amazon, который исходит за пределами VPC, независимо от настроек группы безопасности.

Что-нибудь, что мне не хватает, что могло бы привести к падению этого трафика?

Оказывается, EC2 блокировал перенаправленные пакеты с сервера OpenVPN.

На панели инструментов EC2 есть параметр «Сеть и безопасность» -> «Сетевые интерфейсы» -> «Действия» -> «Изменить источник / место назначения». Проверьте.

Когда я отключил это на всех моих экземплярах, трафик через VPN идет должным образом.

Надеюсь, это поможет кому-то другому.

Вы опередили меня своим собственным ответом, так что я немного его расширю ...

Если вам нужно встроить это в сценарий начальной загрузки вашего экземпляра, вы можете добавить следующее в блок пользовательских данных (при запуске экземпляра это делается на шаге 3, Настройка сведений об экземпляре ... разверните раздел «Дополнительные сведения» внизу страницы ) для экземпляра ... обновите строку 3 для правильного региона:

#!/bin/bash
export my_instance=`curl http://169.254.169.254/latest/meta-data/instance-id`
export AWS_DEFAULT_REGION=us-east-1
aws ec2 modify-instance-attribute --instance-id $my_instance --no-source-dest-check

... и если это для экземпляра NAT, вы можете изменить свою таблицу маршрутов, добавив эту строку (обновите идентификатор таблицы маршрутов для идентификатора таблицы маршрутов, используемой вашим VPC):

aws ec2 replace-route --route-table-id rtb-01234567 --destination-cidr-block 0.0.0.0/0 --instance-id $my_instance

Чтобы это работало, вашему экземпляру потребуются права на обновление атрибута и замену маршрута ... Вы можете сделать это с помощью роли EC2 с помощью следующего заявления политики, а затем указать имя политики в поле Роль IAM (также в поле Шаг 3 мастера EC2, настройка сведений об экземпляре):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1413415456000",
      "Effect": "Allow",
      "Action": [
        "ec2:ModifyInstanceAttribute",
        "ec2:ReplaceRoute"
      ],
      "Resource": "*"
    }
  ]
}