Мой босс стал экстра-параноиком и хочет, чтобы я организовал для него какую-то цепочку 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
....
Теперь просто такие мелочи, как автоматизация и пост-ап скрипты ... Спасибо за помощь!