VPN을 통해 IP 라우팅을 할 수 없습니다

VPN을 통해 IP 라우팅을 할 수 없습니다

VPN을 실행하려고 합니다. 와 같이 모든 트래픽을 라우팅하는 대신 프로그램이 인터페이스를 명시적으로 요청하고 싶습니다 curl --interface.

curl --interface ppp0 ip.bsd-unix.netVPN을 통해 전송해야 하지만 어떻게든 tcpdump또는 을 iftop사용 하여소스 IP가 10.10.1.2인 경우에도 대신 eth0을 통과하는 트래픽을 볼 수 있습니다.. 내 내용은 다음과 같습니다 ip route show.

default via 149.x.y.z dev eth0
10.10.1.1 dev ppp0  proto kernel  scope link  src 10.10.1.2
149.x.y.128/25 dev eth0  proto kernel  scope link  src 149.x.y.172

일부 IP가 가려졌습니다. 두 번째는 xl2tp가 시작되고 ppp0 인터페이스가 생성될 때 추가됩니다. 149.etc는 내 LAN이고 10.etc는 내 VPN입니다.


또한, ping -I ppp0 8.8.8.8ppp0 활동을 볼 수 있고 VPN을 통과하고 있음을 시사하는 더 높은 ms의 응답을 받습니다.

답변1

나는 패킷의 소스 IP가 인터페이스의 소스 IP와 일치하면 해당 인터페이스를 사용할 것이라고 가정했습니다. 그리고 그것이 본질적인 IP 동작이 아니었다면 내 두 번째 경로가 그렇게 했을 것입니다. src경로의 일부는 나에게 붉은 청어였습니다.

그러면 내 프로그램은 소스 IP를 설정하는 ppp0 주소에 바인딩됩니다. 그렇죠? @davidgo님 말씀대로 라우팅 테이블을 따로 만들었네요...

echo 200 custom | sudo tee -a /etc/iproute2/rt_tables

...그런 다음 해당 소스 IP가 있는 패킷에 대해 사용자 정의 테이블을 사용하는 규칙을 추가했습니다...

sudo ip rule add from 10.10.1.2 lookup custom

...그리고 ppp0의 게이트웨이를 통과하는 모든 트래픽에 대해 ppp0을 사용하도록 사용자 정의 테이블에 규칙을 추가했습니다.

sudo ip route add default via 10.10.1.1 dev ppp0 table custom

curl ip.bsd-unix.net내 집 IP를 제공하고 curl --interface ppp0 ip.bsd-unix.netVPN의 원격 IP를 제공합니다. 효과가있다!

그래도 나는 왜 ping이 ppp0을 올바르게 통과했는지에 대해 관심이 있습니다.

관련 정보