Я пытаюсь использовать 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": "*"
}
]
}