패킷이 VPN 안팎으로 흐를 수 있도록 Linux 시스템에서 IPtables를 구성하고 싶습니다.
이는 3개의 노드가 있는 소규모 네트워크입니다.
- v1: VPN 내부의 Linux 머신. VPN 서브넷은 10.10.100.0/22입니다.
- out1: VPN 외부의 Linux 시스템입니다. VPN 및 VPN IP 내부에 존재하는 노드 수에 대한 정보가 포함되어 있지만 VPN 자체에는 없습니다.
- r: 라우팅 요구 사항에 따라 설정된 iptables가 있는 Linux 시스템입니다. 이는 VPN에 있으며 out1도 VPN에 패킷을 보낼 수 있습니다. 그래서 그것은 가장자리에 있습니다. 따라서 r의 eth0은 out1과 동일한 네트워크에 있고 tun0은 VPN 인터페이스입니다.
나는 r을 10.10.100.0/22로 향하는 out1을 제외한 모든 패킷에 대한 "다음 홉"으로 만들었습니다. 그래서 패킷이 r로 들어오고 있습니다. r에 대한 다음 두 가지 iptables 규칙을 사용하면 out1이 netcat을 통해 v1과 통신할 수 있습니다.
iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT
MASQUERADE 기능이 필요한 이유는 무엇입니까?
v1이 out1의 ACK 패킷을 시도하면 r에 도착하여 삭제됩니다. tcpdump를 사용하여 v1이 out1로 향하는 패킷을 보내고 r에 도달했지만 결코 out1에 도달하지 않는다는 것을 확인했습니다.
루프를 어떻게 닫나요? out1이 이미 대상 IP를 알고 있기 때문에 NAT를 수행할 필요가 없습니다. r이 패킷을 eth0에서 tun0으로 이동한 다음 tun0에서 eth0으로 이동하기를 원합니다.
답변1
나는 이걸했다
#Forward connections coming in from eth0 to tun0
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
#Masquerade packets leaving tun0
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#Forward Stateful connections coming in from tun0 to eth0
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED \
-j ACCEPT
답변2
다음 예에서 VPN 디바이스 이름은 tun0
(OpenVPN)이고 VPN 게이트웨이는 172.21.23.172입니다.
Linux 라우터에 VPN 설치(저는 ipvanish w. openvpn을 사용합니다)
iptables를 사용하여 트래픽 라우팅
sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE
예:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
라우팅 테이블 구성(모든 트래픽이 VPN을 통해 라우팅되도록)
sudo ip route add default via [VPN ipv4 address] dev [VPN dev]
예:
sudo ip route add default via 172.21.23.172 dev tun0
다음 명령을 실행하여 네트워크의 장치가 실제로 VPN을 통해 라우팅되는지 확인하십시오.
윈도우:
tracert 1.1.1.1
리눅스:traceroute 1.1.1.1
이제 끝났습니다!