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

Сбой одностороннего трафика туннеля OpenVPN между LAN и AWS VPC

Мы пытаемся настроить туннель OpenVPN, который позволяет устройствам в нашей локальной сети связываться с серверами в Amazon VPC. Мы используем готовый экземпляр сервера доступа OpenVPN на Amazon и следуем документации, чтобы настроить наш локальный сервер в качестве шлюза.

Изображение конфигурации: http://imgur.com/Y33PdJU

Сервер Amazon может без проблем связываться с маршрутизатором A в нашей локальной сети (ping, ssh), однако, когда мы пытаемся выполнить команду ping с маршрутизатора A на частный IP-адрес сервера, он не проходит. Используя tcpdump, мы видим эхо-запрос на интерфейсе eth0 шлюза A, но мы ничего не видим на интерфейсе tun1. Похоже, что он неправильно перенаправляется на интерфейс tun0. Используя конфигурацию OpenVPN, мы сделали так, чтобы клиенты могли действовать как шлюз.

Где мы ошибаемся? Подробности ниже.

Левая сторона шлюза

netstat -rn

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.23.0.1 0.0.0.0 UG 0 0 0 wlan0
10.0.0.2 10.0.2.1 255.255.255.255 UGH 0 0 0 tun1
10.0.1.0 10.0.2.1 255.255.255.0 UG 0 0 0 tun1
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
10.23.0.0 0.0.0.0 255.255.240.0 U 0 0 0 wlan0
54.208.149.66 10.23.0.1 255.255.255.255 UGH 0 0 0 wlan0
172.16.0.0 172.16.0.1 255.255.0.0 UG 0 0 0 tap0
192.168.0.0 192.168.10.100 255.255.0.0 UG 0 0 0 eth0

sudo iptables --list

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

IP-маршрут

default via 10.23.0.1 dev wlan0  proto static 
10.0.0.2 via 10.0.2.1 dev tun1  metric 101 
10.0.1.0/24 via 10.0.2.1 dev tun1  metric 101 
10.0.2.0/24 dev tun1  proto kernel  scope link  src 10.0.2.12 
10.23.0.0/20 dev wlan0  proto kernel  scope link  src 10.23.3.197  metric 9 
54.208.149.66 via 10.23.0.1 dev wlan0 
172.16.0.0/16 via 172.16.0.1 dev tap0 
192.168.0.0/16 via 192.168.10.100 dev eth0 

Конфигурация OpenVPN

setenv FORWARD_COMPATIBLE 1
client
proto tcp
remote vpn.xxx.com
port 3389
dev tun
dev-type tun
ns-cert-type server
reneg-sec 604800
sndbuf 100000
rcvbuf 100000
# NOTE: LZO commands are pushed by the Access Server at connect time.
# NOTE: The below line doesn't disable LZO.
comp-lzo no
verb 3
setenv PUSH_PEER_INFO

IP правило

0:    from all lookup local 
220:    from all lookup 220 
32766:    from all lookup main 
32767:    from all lookup default

ifconfig

eth0 Link encap:Ethernet HWaddr 44:8a:5b:57:a7:68
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::468a:5bff:fe57:a768/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96265 errors:0 dropped:103 overruns:0 frame:0
TX packets:42772 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15112811 (15.1 MB) TX bytes:6396552 (6.3 MB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1420458 errors:0 dropped:0 overruns:0 frame:0
TX packets:1420458 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:339956597 (339.9 MB) TX bytes:339956597 (339.9 MB)

tap0 Link encap:Ethernet HWaddr a6:0a:3c:76:bd:33
inet addr:172.16.0.1 Bcast:172.16.0.255 Mask:255.255.255.0
inet6 addr: fe80::a40a:3cff:fe76:bd33/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:138694 errors:0 dropped:1155 overruns:0 frame:0
TX packets:118026 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:49993976 (49.9 MB) TX bytes:25231042 (25.2 MB)

tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.2.11 P-t-P:10.0.2.11 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1260 (1.2 KB) TX bytes:1372 (1.3 KB)

wlan0 Link encap:Ethernet HWaddr 40:f0:2f:8f:51:5c
inet addr:10.23.3.197 Bcast:10.23.15.255 Mask:255.255.240.0
inet6 addr: fe80::42f0:2fff:fe8f:515c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2205804 errors:0 dropped:0 overruns:0 frame:0
TX packets:1773520 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1823901987 (1.8 GB) TX bytes:273830921 (273.8 MB)

Правая сторона шлюза

OpenVPN Access Server Version: 2.0.8    
Accepting VPN client connections on IP address: all interfaces  
Port for VPN client connections:    tcp/3389    
OSI Layer:  3 (routing/NAT) 
Clients access private subnets using:   Routing 

openvpnas @ openvpnas2: / var / log $ netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG        0 0          0 eth0
10.0.1.0        10.0.1.128      255.255.255.0   UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 as0t0
172.16.0.0      0.0.0.0         255.255.0.0     U         0 0          0 as0t0
192.168.0.0     0.0.0.0         255.255.0.0     U         0 0          0 as0t0

Я думаю, что отсутствует конфигурация iroute. Проще говоря, вам нужно создать папку ccd и указать путь к ней в файле conf openvpn следующим образом:

client-config-dir /path-to-ccd/ccd

В этой папке вы должны создать один файл, который будет соответствовать конкретной конфигурации vpn (если у вас есть username-as-common-name в conf имя сертификата - это имя файла) и в этот файл поместите внутреннюю подсеть, например.

iroute 192.168.x.x 255.255.x.x

В этом случае openvpn будет знать, как подключиться к внутренней подсети.

Подробнее об этом здесь: https://community.openvpn.net/openvpn/wiki/RoutedLans

Надеюсь это поможет.