네트워킹 초보자. 호스트 eth0
와 tun0
OpenVPN 클라이언트에 두 개의 인터페이스가 있습니다 . IP 주소는 다음과 같습니다.
eth0 192.168.1.22
tun0 10.1.0.8
질문 1
을 위한나가는대상 주소를 변경하여 트래픽을 tun0
강제로 VPN을 사용하게 됩니까?
아니요. 하지만 tun0에 게이트웨이 주소를 사용하면 됩니다. 다음으로 테스트되었습니다.
iptables -t nat -N VPN
iptables -t nat -I OUTPUT -j VPN
iptables -t nat -A VPN -p tcp -j DNAT --to-destination 10.1.0.170
10.1.0.170
VPN의 게이트웨이 주소는 어디에 있습니까(를 사용하여 찾았습니다 ip route
).
- 위의 예에서는
-N
nat 테이블(-t
)에 대한 NEW( ) 체인을 생성합니다. - VPN 체인으로의 점프는
OUT
(로컬 앱 직후)에서 이루어집니다. 삽입(-I
)을 사용하여 OUT의 다른 규칙을 대체합니다. tun0
소스 변경 대상에서 시작되는 트래픽의 경우 디바이스 의 게이트웨이로 변경됨을 암시합니다 .
질문 2(a)
아웃바운드 트래픽의 경우 대상 주소는 인터페이스의 IP 주소입니까 eth0
, 아니면 게이트웨이 주소입니까? eth0
기본 인터페이스/게이트웨이라고 가정합니다 .
질문 2(b)
로컬 앱에서 생성된 트래픽의 소스 주소는 무엇입니까?
질문 3
이 문제는 iptables만으로 해결할 수 있습니까? 아니면 라우팅 테이블을 수정해야 합니까? 두 인터페이스가 모두 동일한 호스트(예: 동일한 데비안 상자)에 있기 때문입니다.
추가 정보
원리를 이해해서 내 사례에 적용하려고 노력 중이에요. 총 3개의 I 주소 서브넷이 있으며, 세 번째는 다른 가상 인터페이스와 연결된 172.17.42.1/16 범위에 있습니다 docker0
.
본질적으로 나는 트래픽을 다음으로 유도하고 싶습니다.단지VPN을 통해 172.17.42.8.
답변1
무엇보다도 ArchLinux wiki iptables 페이지에 링크된 훌륭한 그림은 다양한 iptables
체인(답변 하단)을 통한 패킷 흐름을 식별하는 데 유용합니다.
지원
iptables-save > back.up.file
sudo
Linux 배포판의 취향을 확인하세요. 루트가 아니기 때문에 추가해야 했습니다 .
질문 2(a), 2(b)
소스 및 대상 주소를 결정하려면 LOG
및 TRACE
기능이 매우 유용하다는 것을 알았습니다.
iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG --log-prefix "ABC-LOG-PREFIX "
기본 테이블은 이지만 특히 다른 테이블 등 filter
을 탐색하려는 경우 구문을 볼 수 있도록 명시적으로 명시했습니다. 다른 규칙이 적용되기 전에 패킷이 기록되기를 원했기 때문에 규칙을 삽입했습니다 . 로그 파일이 포화되지 않도록 속도 제한을 추가했습니다 . 마지막으로 로그 파일을 쉽게 검색할 수 있도록 접두어를 추가했습니다 . 예를 들어, Linux Mint에서는 다음과 같습니다.mangle
nat
-I
-m limit --limit 5/m --limit-burst 10
--log-prefix
cat /var/log/kern.log | grep "ABC-LOG-PREFIX"
두 번째로 디버깅을 위해 이 TRACE
명령은 전체 프로세스를 통해 패킷을 추적합니다.
IPTABLES -t raw -A PREROUTING -p tcp -j TRACE
경고, 이는 추적됩니다모두tcp 패킷, 자세한 내용은 참조베를린 관리
질문 3
두 인터페이스( eth0
및 tun0
)가 모두 동일한 호스트에 있었기 때문에 아래 패킷 필터 다이어그램에서 아웃바운드 트래픽이 동일한 지점에서 시작되는 것을 볼 수 있습니다. 패킷이 사용하는 경로는 기본 게이트웨이 및 관련 인터페이스에 의해 결정되며 다음을 iproute2
실행하여 결정할 수 있습니다.
ip route
그러면 어떤 주소 범위에 어떤 인터페이스가 사용되는지 기본 게이트웨이가 표시됩니다.
패킷 흐름 다이어그램
답변2
내가 알 수 있듯이 분할 터널링(또는 오히려 비활성화하려고 하는 것)에 대해 이야기하고 있습니다.
OpenVPN의 리디렉션 게이트웨이 지시문을 살펴보세요.https://openvpn.net/index.php/open-source/documentation/howto.html#redirect
답변3
다음 예에서 VPN 장치 이름은 tun0(OpenVPN)이고 VPN 게이트웨이는 172.21.23.172입니다.
#1 - Linux 라우터에 VPN을 설치합니다(저는 openvpn과 ipvanish를 사용하고 있습니다).
#2 - iptables를 사용하여 트래픽 라우팅
sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE
예:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#3 - 라우팅 테이블 구성(모든 트래픽이 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
#4 - 다음 명령을 실행하여 네트워크의 장치가 실제로 VPN을 통해 라우팅되는지 확인하세요.
윈도우: tracert 1.1.1.1
리눅스:traceroute 1.1.1.1
넌 끝났어!