Я пытаюсь соединить две сети вместе через OpenVPN.
Шлюзы могут пинговать друг друга, однако они не могут получить доступ к другим компьютерам в сети, к которой они присоединяются. Журналы не показывают никаких ошибок, и соединение установлено.
Что мне здесь не хватает? Кажется, эта проблема возникает у многих по разным причинам, но после 50+ попыток я сдался и решил спросить :)
Сеть 1:
dev tun
port 1194
ifconfig 10.8.222.40 10.8.222.41
route 10.2.1.0 255.255.255.0 vpn_gateway
comp-lzo
keepalive 10 60
persist-key
persist-tun
user nobody
group nobody
secret /etc/openvpn/static.key
ip route
default via 10.0.1.1 dev eth0
10.0.1.0/27 dev eth0 proto kernel scope link src 10.0.1.9
10.2.1.0/24 via 10.8.222.41 dev tun0
10.3.0.0/24 via 10.3.0.2 dev tun2
10.3.0.2 dev tun2 proto kernel scope link src 10.3.0.1
10.8.222.41 dev tun0 proto kernel scope link src 10.8.222.40
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
Сеть 2
dev tun
port 1194
remote my_ext_ip 1194
ifconfig 10.8.222.41 10.8.222.40
route 10.0.0.0 255.254.0.0 vpn_gateway
comp-lzo
keepalive 10 60
persist-key
persist-tun
user nobody
group nobody
secret /etc/openvpn/static.key
ip route
default via 10.2.1.1 dev eth0
10.0.0.0/15 via 10.8.222.40 dev tun0
10.2.1.0/24 dev eth0 proto kernel scope link src 10.2.1.9
10.8.222.40 dev tun0 proto kernel scope link src 10.8.222.41
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
172.27.224.0/22 dev as0t0 proto kernel scope link src 172.27.224.1
172.27.228.0/22 dev as0t1 proto kernel scope link src 172.27.228.1
172.27.232.0/22 dev as0t2 proto kernel scope link src 172.27.232.1
172.27.236.0/22 dev as0t3 proto kernel scope link src 172.27.236.1
Обновить:
Вот что у меня есть с iptables:
Обе сети: iptables -I FORWARD -i eth0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -i tun0 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
Сеть 1: iptables -t nat -A POSTROUTING -s "10.0.0.0/15" -o "eth0" -j MASQUERADE
iptables -A FORWARD -p tcp -s 10.0.0.0/15 -d 0.0.0.0/0 -j ACCEPT
Сеть 2: iptables -t nat -A POSTROUTING -s "10.2.1.0/24" -o "eth0" -j MASQUERADE
iptables -A FORWARD -p tcp -s 10.2.1.0/24 -d 0.0.0.0/0 -j ACCEPT
\
Обновление 2:
Въезд в туннель: # tcpdump -i tun0
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
01:01:15.181262 IP ip-10-8-222-41.ec2.internal > ip-10-0-1-5.ec2.internal: ICMP echo request, id 28767, seq 1, length 64
Выход из туннеля: # tcpdump -i tun0
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
01:03:44.304930 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28784, seq 1, length 64
Коммутационные интерфейсы # tcpdump -i eth0
01:08:56.093291 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28785, seq 3, length 64
Решено!
tcpdump позволил мне увидеть, что источником пакетов для пересылки iptables был 10.8.222.41/32
Итак, добавив
iptables -t nat -A POSTROUTING -s "10.8.222.41/32" -o "eth0" -j MASQUERADE
iptables -A FORWARD -p tcp -s 10.8.222.41/32 -d 0.0.0.0/0 -j ACCEPT
решил проблему!
Теперь оба шлюза могут пинговать серверы в сети друг друга. Теперь мне нужно выяснить, как разрешить это для всех компьютеров в обеих сетях, но это другой вопрос ...
Итак, из вывода вашего IP-маршрута это выглядит как ваш
eth0 at Network 1 is 10.0.1.0 with mask 255.255.255.224
eth0 at Network 2 is 10.2.1.0 with mask 255.255.255.0
Поэтому я бы отредактировал openvpn conf на машине сети 1, чтобы читать:
route 10.2.1.0 255.255.255.0 #this is the remote network I want to see
и openvpn conf на машине Сети 2, чтобы прочитать:
route 10.0.1.0 255.255.255.224 #this is the remote network I want to see
Это должно привести к правильным маршрутам. Также не беспокойтесь о добавлении параметра vpn_gateway в конце строки маршрута, он не нужен. По умолчанию он добавит другой конец туннеля в качестве шлюза.