인터넷에서 주소 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
이러한 변경 사항은 재부팅 후에는 유지되지 않으며 원하는 경우 영구적으로 변경해야 합니다.