VPN을 통해 트래픽을 전달하는 iptables

VPN을 통해 트래픽을 전달하는 iptables

네트워킹 초보자. 호스트 eth0tun0OpenVPN 클라이언트에 두 개의 인터페이스가 있습니다 . 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.170VPN의 게이트웨이 주소는 어디에 있습니까(를 사용하여 찾았습니다 ip route).

  1. 위의 예에서는 -Nnat 테이블( -t)에 대한 NEW( ) 체인을 생성합니다.
  2. VPN 체인으로의 점프는 OUT(로컬 앱 직후)에서 이루어집니다. 삽입( -I)을 사용하여 OUT의 다른 규칙을 대체합니다.
  3. 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

sudoLinux 배포판의 취향을 확인하세요. 루트가 아니기 때문에 추가해야 했습니다 .

질문 2(a), 2(b)

소스 및 대상 주소를 결정하려면 LOGTRACE기능이 매우 유용하다는 것을 알았습니다.

iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG  --log-prefix "ABC-LOG-PREFIX "

기본 테이블은 이지만 특히 다른 테이블 등 filter을 탐색하려는 경우 구문을 볼 수 있도록 명시적으로 명시했습니다. 다른 규칙이 적용되기 전에 패킷이 기록되기를 원했기 때문에 규칙을 삽입했습니다 . 로그 파일이 포화되지 않도록 속도 제한을 추가했습니다 . 마지막으로 로그 파일을 쉽게 검색할 수 있도록 접두어를 추가했습니다 . 예를 들어, Linux Mint에서는 다음과 같습니다.manglenat-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

두 인터페이스( eth0tun0)가 모두 동일한 호스트에 있었기 때문에 아래 패킷 필터 다이어그램에서 아웃바운드 트래픽이 동일한 지점에서 시작되는 것을 볼 수 있습니다. 패킷이 사용하는 경로는 기본 게이트웨이 및 관련 인터페이스에 의해 결정되며 다음을 iproute2실행하여 결정할 수 있습니다.

ip route

그러면 어떤 주소 범위에 어떤 인터페이스가 사용되는지 기본 게이트웨이가 표시됩니다.

패킷 흐름 다이어그램

iptables 패킷 흐름 다이어그램

답변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

넌 끝났어!

관련 정보