Как направить VPN-трафик через два шлюза?

Как направить VPN-трафик через два шлюза?

Я хотел бы иметь возможность установить VPN-туннель из интернета на мой сервер OpenVPN по адресу 192.168.1.45. Настройка моей домашней сети немного сложна, поскольку я использую Raspberry Pi в качестве шлюза для маршрутизации всего трафика в моей домашней сети через другой VPN (называемый VPN 1 на рисунке и представленный толстой линией).

Ссылка на схему настройки сети(Похоже, я пока не могу вставлять изображения)

Моя настройка работает нормально, за исключением того, что в этой конфигурации я не могу установить соединения через VPN 2.

Дополнительные сведения о конфигурации: Все шлюзы имеют фиксированные IP-адреса. Шлюз LAN используется шлюзом VPN1 и перенаправляет входящий трафик с порта 8787 на порт 1194 (правило установлено с помощью моего графического интерфейса ISP GW). Вот правила iptables на шлюзе VPN 1:

Chain PREROUTING (policy ACCEPT 15038 packets, 1421K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 10 packets, 1246 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 344 packets, 25041 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 183 packets, 13486 bytes)
num   pkts bytes target     prot opt in     out     source               destination
3     9959 1007K MASQUERADE  all  --  any    tun0    anywhere             anywhere
Chain INPUT (policy DROP 3111 packets, 248K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
2        8   688 ACCEPT     icmp --  eth0   any     anywhere             anywhere
3     3507  233K ACCEPT     tcp  --  eth0   any     192.168.1.0/24       anywhere             tcp dpt:ssh
4        0     0 ACCEPT     tcp  --  eth0   any     10.8.0.0/24          anywhere             tcp dpt:ssh
5     193K  202M ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
6        0     0 ACCEPT     udp  --  eth0   any     anywhere             anywhere             udp dpt:openvpn

Chain FORWARD (policy DROP 16 packets, 1408 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp spt:ssh
2        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp dpt:ssh
5    97203   12M ACCEPT     all  --  eth0   tun0    anywhere             anywhere
6     190K  190M ACCEPT     all  --  tun0   eth0    anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 104K packets, 18M bytes)
num   pkts bytes target     prot opt in     out     source               destination

Я пробовал добавлять такие правила:

sudo iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.45 --dport 1194 -j SNAT --to-source 192.168.1.43

sudo iptables -t nat -A PREROUTING -p tcp --sport 1194 -j DNAT --to-destination 192.168.1.1:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.1 --sport 1194 -j SNAT --to-source 192.168.1.45

sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT

но это не сработало. Теперь я застрял и не смог найти решение в сети... Я тоже полный новичок в этой области, к сожалению, я делал это ради развлечения и научился только методом проб и ошибок. Любая помощь будет высоко оценена :)

решение1

Успех! Мне наконец удалось направить пакеты так, как я и предполагал. Решение заключалось в том, что одного iptables было недостаточно, мне также нужно было изменить маршрутизацию моих VPN-пакетов и добавить новое правило с помощью команды ip.

Вот как я это сделал, если кто-то захочет сделать что-то подобное:

# do port forwarding to the VPN 2 server and allow forward traffic
iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT
# mark all packets that have to be routed through the 192.168.1.1 gateway
iptables -t mangle -A PREROUTING -p tcp --sport 1194 -j MARK --set-mark 1
# define desired specific route for marked packets
echo 201 openvpn1194.out | tee --append /etc/iproute2/rt_tables
ip rule add fwmark 1 table openvpn1194.out
ip route add default via 192.168.1.1 dev eth0 table openvpn1194.out

Обратите внимание, что эти изменения не сохранятся после перезагрузки, и вам придется сделать их постоянными, если они вас устраивают.

Связанный контент