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

Создание цепочки VPN с использованием openvpn

Мой босс стал экстра-параноиком и хочет, чтобы я организовал для него какую-то цепочку VPN. Придумываю следующую схему:

Client              VPN1                    VPN2
10.0.1.x[tun0]------10.0.1.1[tun0]
[1.1.1.1][eth0]     10.0.2.x[tun1]----------10.0.2.1[tun0]
                    2.2.2.2[eth0]           3.3.3.3[eth0]------internet

Я могу использовать VPN1 от клиента через пересылку iptables, например:

vpn1 # iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
vpn1 # iptables -A FORWARD -d 10.0.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
vpn1 # iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 2.2.2.2     

Я могу использовать VPN2 из VPN1, если я сделаю его шлюзом по умолчанию или если выберу указанные хосты, например:

vpn1 # route add -host 8.8.8.8 dev tun1      

Я не могу использовать полную цепочку VPN1-VPN2-Internet от клиента. Я пробовал перенаправлять трафик с tun0 на tun1 и наоборот вот так:

vpn1 # iptables -A FORWARD -i tun0 -o tun1 -j ACCEPT
vpn1 # iptables -A FORWARD -i tun1 -o tun0 -j ACCEPT

В этом случае я вижу, что ICMP-запросы отправляются с клиентского IP-адреса на обоих интерфейсах VPN1 tun, но не могу получить никакого ответа.

Как я могу перенаправить весь трафик от клиента через полную цепочку?

редактировать: (все на vpn1)

tcpdump -i tun0 icmp показывает запросы с 10.0.1.6 (клиент), идущие в Интернет

tcpdump -i tun1 ничего не показывает

tcpdump -i eth0 показывает то же, что и tun0, 10.0.1.6 (клиент) отправка запроса

Я думал, что правила iptables должны перенаправлять tun0 на tun1 и наоборот, но по какой-то причине трафик от tun0 попадает на eth0, а затем выходит в Интернет, может ли это быть проблемой?

Мне удалось заставить эту штуку работать. По сути, мне нужно пересылать все пакеты, которые приходят от клиента, на интерфейс tun0 VPN1 на IP-адрес VPN1 tun1 (10.0.2.6).

iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 10.0.2.6

Во-вторых, мне нужно использовать систему iproute2, добавив следующие правила:

это добавляет маршрут по умолчанию в таблицу 120

ip route add default via 10.0.2.6 table 120 

и эта маршрутизация на основе правил использует src пакета как условие

ip rule add from 10.0.1.0/24 table 120 

И хорошо! Теперь, чтобы проверить, я делаю traceroute 8.8.8.8 на клиенте:

1  10.0.1.1 (10.0.1.1) 223.570 ms  444.898 ms  444.875 ms
2  10.0.2.1 (10.0.2.1) 444.845 ms  666.709 ms  889.544 ms
....

Теперь просто такие мелочи, как автоматизация и пост-ап скрипты ... Спасибо за помощь!