У меня следующая установка:
PROD net (10.88.88.0/24)
ОФИСНАЯ сеть (192.168.2.0/24)
на PROD у меня есть openvpn server (vpnprod), поэтому OFFICE может подключиться.
В ОФИСЕ у меня есть машина openvpn (vpnoffice), на которой работает как сервер openvpn, чтобы внешние пользователи, так и клиент могли подключаться к PROD.
И vpnprod, и vpnoffice работают под управлением Linux.
Все работает нормально, т.е. из ОФИСА (любой машины) могу произвести подключение к ПРОД (любой) - с некоторыми ограничениями.
У меня вся маршрутизация настроена правильно.
Кроме того, я могу подключать клиентов к OFFICE, и они могут получить доступ к компьютерам OFFICE - без проблем.
Ошибка возникает, если клиент (удаленный, подключенный к OFFICE) пытается получить доступ к некоторой машине PROD. Время истекает.
Я запустил tcpdump на обоих интерфейсах tun на vpnoffice, и он показывает пакеты, отправленные подключенным клиентом. Я предполагаю, что это означает, что маршрутизация там в порядке.
Но на tun0 на vpnprod я этих пакетов вообще не вижу - они вообще туда не попадают.
Итак, резюмируем:
officemachine -> vpnoffice -> vpnprod -> prodmachine - WORKS
remote -> vpnoffice -> officemachine - WORKS
remote -> vpnoffice -> vpnprod -> prodmachine - FAILS!!!
Я не очень хорошо знаком с tcpdump или подобными инструментами. Есть идеи, как подойти к этой проблеме и как ее исследовать?
Что еще мне нужно проверить?
Я проверил правила брандмауэра (IPTABLES) и каждое правило, которое отбрасывает любые записи запросов в журнал. Но я не вижу никаких записей для этого конкретного запроса, сделанного от удаленного клиента через vpnoffice к vpmprod.
По просьбе @Andrew McGregor (я заключил в скобки некоторые пояснения):
IP-адрес (vpnprod):
> ip addr
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2(DMZ): eth2: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:60:cf:20:bb:54 brd ff:ff:ff:ff:ff:ff
inet 10.88.8.1/24 brd 10.88.8.255 scope global eth2
inet6 fe80::260:cfff:fe20:bb54/64 scope link
valid_lft forever preferred_lft forever
3(internal): eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:10:18:02:30:c4 brd ff:ff:ff:ff:ff:ff
inet 10.88.88.1/24 brd 10.88.88.255 scope global eth1
inet6 fe80::210:18ff:fe02:30c4/64 scope link
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:02:b3:25:94:7d brd ff:ff:ff:ff:ff:ff
inet MY_EXT_NET/28 brd EXT_IP_BCAST scope global eth0
inet EXT_IP_1/28 brd EXT_IP_BCAST scope global secondary eth0:FWB1
inet EXT_IP_2/28 brd EXT_IP_BCAST scope global secondary eth0:FWB2
inet EXT_IP_3/28 brd EXT_IP_BCAST scope global secondary eth0:FWB3
inet EXT_IP_4/28 brd EXT_IP_BCAST scope global secondary eth0:FWB4
inet6 MY::PROD:EXT:NET:XXXX/64 scope link
valid_lft forever preferred_lft forever
5(OTHER_INT_NET): eth3: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:b0:d0:b0:bd:94 brd ff:ff:ff:ff:ff:ff
inet 172.19.2.193/27 brd 172.19.2.223 scope global eth3
inet 172.19.2.194/27 brd 172.19.2.223 scope global secondary eth3:FWB5
inet 172.19.2.195/27 brd 172.19.2.223 scope global secondary eth3:FWB6
inet6 fe80::2b0:d0ff:feb0:bd94/64 scope link
valid_lft forever preferred_lft forever
6: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
7(PRODVPN server): tun0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc pfifo_fast qlen 100
link/[65534]
inet 10.136.136.1 peer 10.136.136.2/32 scope global tun0
Итак, tun0 - это vpn-сервер на prod, привязанный к ip-адресу EXT_IP_1.
ip route prodvpn:
10.136.136.2 dev tun0 proto kernel scope link src 10.136.136.1
EXT_NET/28 dev eth0 proto kernel scope link src EXT_NET_IP0
172.19.2.192/27 dev eth3 proto kernel scope link src 172.19.2.193
10.136.135.0/24 via 10.136.136.2 dev tun0
192.168.2.0/24 (office_int) via 10.136.136.2 dev tun0
192.168.1.0/24 (office_DMZ) via 10.136.136.2 dev tun0
10.39.3.0/24 via 172.19.2.222 dev eth3
10.88.88.0/24 dev eth1 proto kernel scope link src 10.88.88.1
10.39.12.0/24 via 172.19.2.222 dev eth3
10.88.8.0/24 dev eth2 proto kernel scope link src 10.88.8.1
10.136.136.0/24 via 10.136.136.2 dev tun0
10.176.0.0/16 (OTHER_INT_NET) via 172.19.2.222 dev eth3
169.254.0.0/16 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via EXT_IP_ISP_GATEWAY dev eth0
ip адрес officevpn:
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0(officeDMZ): <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:d0:b7:84:ab:a2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
3: eth1(office external IPs): <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:06:5b:39:c4:21 brd ff:ff:ff:ff:ff:ff
inet OFF_EXT_IP1/29 brd 216.17.90.95 scope global eth1
inet OFF_EXT_IP2/29 brd 216.17.90.95 scope global secondary eth1:FWB1
inet OFF_EXT_IP3/29 brd 216.17.90.95 scope global secondary eth1:FWB2
inet OFF_EXT_IP4/29 brd 216.17.90.95 scope global secondary eth1:FWB3
4: eth2(office_internal): <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:da:d7:14:77 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.254/24 brd 192.168.2.255 scope global eth2
11: tun1(officevpn_server): <POINTOPOINT,MULTICAST,NOARP,UP,10000> mtu 1500 qdisc pfifo_fast qlen 100
link/[65534]
inet 10.136.135.1 peer 10.136.135.2/32 scope global tun1
12: tun0(officevpn-client-to-prod): <POINTOPOINT,MULTICAST,NOARP,UP,10000> mtu 1500 qdisc pfifo_fast qlen 100
link/[65534]
inet 10.136.136.6 peer 10.136.136.5/32 scope global tun0
tun1 привязан к OFF_EXT_IP1 для обслуживания подключающихся клиентов.
ip route officevpn:
10.136.135.2 dev tun1 proto kernel scope link src 10.136.135.1
10.136.136.5 dev tun0 proto kernel scope link src 10.136.136.6
10.136.136.1 via 10.136.136.5 dev tun0
EXT_IP_NET/29 dev eth1 proto kernel scope link src EXT_IP1
172.19.2.192/27 via 10.136.136.5 dev tun0
10.135.137.0/24 via 10.136.135.2 dev tun1
10.136.135.0/24 via 10.136.135.2 dev tun1
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.254
10.39.3.0/24 via 10.136.136.5 dev tun0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
10.88.88.0/24 via 10.136.136.5 dev tun0
10.39.12.0/24 via 10.136.136.5 dev tun0
10.88.8.0/24 via 10.136.136.5 dev tun0
10.176.0.0/16 via 10.136.136.5 dev tun0
169.254.0.0/16 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via EXT_IP0(ISP GW) dev eth1
Подводя итог: на prod env у меня есть 4 внешних IP-адреса, привязанных к одному интерфейсу. У меня есть 1 внутренняя сеть (привязанная к 2 интерфейсам) и DMZ (четвертый интерфейс):
в офисе:
Я предполагаю, что удаленные клиенты не знают о сети PROD. Протолкните маршрут через сервер OFFICE. Что-то вроде push "route 10.88.88.0 255.255.255.0"
волю должна это сделать.