FreeBSD를 사용하여 OpenVPN을 통해 특정 인터페이스에서 트래픽 라우팅

FreeBSD를 사용하여 OpenVPN을 통해 특정 인터페이스에서 트래픽 라우팅

FreeBSD 클라이언트와 (Arch) Linux 서버 사이에 OpenVPN을 설정하고 싶습니다.

  • 터널 장치를 통해 FreeBSD에서 명시적으로 전송된 모든 인터넷 트래픽은 OpenVPN을 통해 라우팅됩니다.

하지만

  • FreeBSD 측의 기본 게이트웨이/라우터는 변경되지 않습니다.

즉, curl --interface tun0 example.comFreeBSD에서 비슷한 작업을 하고 있다면 다음을 요청하고 싶습니다.example.comOpenVPN을 통해 라우팅되지만 이렇게 하면 curl example.comVPN 터널이 무시되기를 원합니다.

이 시점에서 두 컴퓨터 사이의 기본 연결을 성공적으로 설정했으며 양쪽이 서로를 볼 수 있습니다.

터널을 통해 원격 시스템에서 실행 중인 웹 서버에서 데이터를 가져올 수 있습니다.

$ curl 10.8.0.1
<!DOCTYPE html>
...

완전성을 위해 인터페이스를 명시적으로 지정하면 어떤 일이 발생하는지 테스트했는데 작동했습니다.

$ curl --interface 10.8.0.14 10.8.0.1
<!DOCTYPE html>
...

$ curl --interface tun0 10.8.0.1
<!DOCTYPE html>
...

그러나 다른 호스트/IP에서 인터페이스를 사용하면 실패합니다.

$ curl --interface tun0 example.com
*hang*

$ curl --interface tun0 93.184.216.34  # (the IP I got for example.com)
*hang*

이렇게 하면 OpenVPN(FreeBSD 측)은 아무 것도 인쇄하지 않으므로 FreeBSD의 네트워크 스택이 OpenVPN을 통해 임의의 트래픽을 적절하게 라우팅하는 RwRw방법을 알 수 있을 만큼 잘 구성되지 않았다고 가정합니다(그리고 내 생각이 정확합니다) .tun0

이러한 라우팅 구성에 대해 내가 찾은 모든 예는 Linux에만 적용됩니다. FreeBSD에서는 어떻게 해야 합니까?

구성이 더 쉬워진다면 FreeBSD와 Linux 측에서 어떤 변경이라도 할 수 있습니다.

원래는 이 글을 포스팅하려고 했는데networkengineering.stackexchange.com,하지만무료 소프트웨어그리고오픈VPN거기에는 태그가 정의되어 있지 않아서 여기에 게시합니다.

답변1

바라보다이 답변.

다중 게이트웨이에 대한 자세한 설명은 다음을 참조하세요.여기.

요점은 새로운 라우팅 테이블을 사용하는 것입니다.

이것이 내가 사용하는 것입니다 - 서버 10.8.0.1/24와 클라이언트 10.8.0.2/24:

echo "10 vpn" >> /etc/iproute2/rt_tables
ip route add default via 10.8.0.1 dev tun0 table vpn
ip rule add from 10.8.0.2/24 table vpn
ip rule add to 10.8.8.1/24 table vpn
ip route flush cache

첫 번째 줄은 재부팅 후에도 유지되어야 하지만 규칙은 그렇지 않습니다.

편집하다: openvpn이 연결된 동안 명령을 실행하는 더 좋은 방법은 upopenvpn 구성 파일의 지시문을 사용하는 것입니다.

up /etc/openvpn/tun0_up.sh

관련 정보