Linux OpenVPN 탭 라우팅은 단일 IP에서는 작동하지만 모든 트래픽에서는 작동하지 않습니다.

Linux OpenVPN 탭 라우팅은 단일 IP에서는 작동하지만 모든 트래픽에서는 작동하지 않습니다.

휴가 여행을 떠나기 전에 홈 VPN을 설정하려고 합니다.

TAP 설정을 사용하는 OpenVPN 서버가 성공적으로 실행되고 있으며 클라이언트와 연결할 수 있습니다.

그러나 이를 통해 클라이언트 트래픽을 라우팅하는 데 문제가 있습니다.

redirect-gateway옵션이 나에게 적합하지 않습니다. 지금은 이를 포기하고 경로를 수동으로 설정하려고 합니다.

내 접근 방식은 먼저 탭 인터페이스에 대해 DHCP 클라이언트(dhcpcd)를 실행한 다음 수동으로 경로를 추가하는 것이었습니다.

# dhcpcd tap0
dhcpcd-9.4.1 starting
...
tap0: rebinding lease of 192.168.1.137
tap0: probing address 192.168.1.137/24
tap0: leased 192.168.1.137 for 86400 seconds
tap0: adding route to 192.168.1.0/24
forked to background, child pid 11185

DHCP 클라이언트가 설정한 경로는 내부 IP에 대해 제대로 작동합니다. 홈 네트워크에 있는 컴퓨터에 ping/ssh를 실행할 수 있습니다. 테더링된 셀 연결에서 이것을 테스트하고 있습니다.

# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600

# ping 192.168.1.136 # another IP on my network
PING 192.168.1.136 (192.168.1.136) 56(84) bytes of data.
64 bytes from 192.168.1.136: icmp_seq=1 ttl=64 time=104 ms
64 bytes from 192.168.1.136: icmp_seq=2 ttl=64 time=83.5 ms
...

홈 네트워크의 게이트웨이 IP를 사용하여 인터넷 호스트에 대한 IP 경로를 수동으로 추가하면 OpenVPN을 통해 해당 경로에 액세스할 수 있습니다.

(참고: 175.55.55.55는 테더링된 셀 연결이고 72.33.33.33은 내 홈 IP입니다.)

# curl -4 https://icanhazip.com
175.55.55.55

# host -t a icanhazip.com
icanhazip.com has address 104.18.115.97
icanhazip.com has address 104.18.114.97

# ip route add 104.18.115.97 via 192.168.1.1
# ip route add 104.18.114.97 via 192.168.1.1

# curl -4 https://icanhazip.com
72.33.33.33

문제는 이것을 모든 트래픽에 일반화하는 방법을 모른다는 것입니다.

VPN을 통해 트래픽을 전달하기 위해 포괄 경로를 추가하려고 했습니다.

# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0

icanhazip.com을 다시 접속하려고 하면 시간이 초과되고 OpenVPN 클라이언트 로그에 다음과 같이 표시됩니다.

2022-12-15 15:27:38 us=127602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=122602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=147702 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445

도움이 된다면 클라이언트(또는 서버)의 로그나 구성을 제공할 수 있지만 이는 라우팅 문제에 더 가깝다고 생각합니다.

답변1

아, 이런.

@TomYan이 제가 알아내는 데 도움을 줬어요.

OpenVPN 클라이언트는 wlan0장치를 통해 OpenVPN 서버와 통신하고 있었습니다.

wlan0경로를 기본값(또는 사실상 기본값, 사용 0.0.0.0/1및 주소)으로 무시 128.0.0.0/1하고 VPN 장치를 통해 모든 트래픽을 보내려고 시도했을 때 tap0OpenVPN 트래픽도 포함되었습니다.

"재귀 라우팅" 메시지는 실제로 정확했습니다.

TCP를 사용하고 있었다면 해당 경로를 거기에 추가하자마자 연결 시간이 초과되었기 때문에 문제를 더 빨리 알아차렸을 것입니다.

해결책은 OpenVPN 클라이언트가 서버에 계속 연결할 수 있도록 허용하는 단일 주소 경로를 명시적으로 추가하는 것입니다.

따라서 DHCP 직후 경로에는 다음이 포함됩니다.

# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600

내 OpenVPN 서버 주소는 72.33.33.33이므로 위의 기본값에 언급된 wlan0 게이트웨이를 통해 수동으로 경로를 추가하겠습니다.

# ip route add 72.33.33.33 via 192.168.149.13 dev wlan0

이제 두 가지 포괄 경로가 작동합니다.

# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
# curl -4 https://icanhazip.com
73.33.33.33

관련 정보