두 개의 게이트웨이를 통해 VPN 트래픽을 라우팅하는 방법은 무엇입니까?

두 개의 게이트웨이를 통해 VPN 트래픽을 라우팅하는 방법은 무엇입니까?

인터넷에서 주소 192.168.1.45의 OpenVPN 서버로 VPN 터널을 설정하고 싶습니다. 내 홈 네트워크 설정은 라즈베리 파이를 게이트웨이로 사용하여 홈 네트워크의 모든 트래픽을 다른 VPN(그림에서 VPN 1이라고 하고 굵은 선으로 표시됨)을 통해 라우팅하기 때문에 약간 복잡합니다.

네트워크 설정의 스키마에 대한 링크(아직 이미지를 삽입할 수 없습니다)

이 구성에서는 VPN 2를 통해 연결을 설정할 수 없다는 점을 제외하면 설정이 제대로 작동합니다.

추가 구성 세부정보: 모든 게이트웨이에는 고정 IP가 있습니다. LAN 게이트웨이는 VPN1 게이트웨이에서 사용되며 포트 8787에서 들어오는 트래픽을 포트 1194(ISP GW GUI를 사용하여 설정된 규칙)로 전달합니다. VPN 1 게이트웨이의 iptables 규칙은 다음과 같습니다.

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

이러한 변경 사항은 재부팅 후에는 유지되지 않으며 원하는 경우 영구적으로 변경해야 합니다.

관련 정보