Unix가 분할 터널링을 처리하는 방법

Unix가 분할 터널링을 처리하는 방법

나는 어떤 프로그램이 일반 인터넷에 연결되고 어떤 프로그램이 VPN을 통해서만 통신할 수 있는지 가장 간단하고 다재다능하며 안전한 방법으로 내 서버에서 제어할 수 있기를 원합니다.

현재 설정

내 라우터에 연결된 1GB RAM을 갖춘 Raspberry Pi 4B 서버가 있습니다. RPI로 전달하는 포트는 Wireguard 인터페이스입니다.작업 그룹 0, 전송 피어를 위한 모든 개인 장치 및 포트에 사용합니다.

RPI에서 일부 서비스를 실행 중입니다. 그 중 일부는 VPN으로 라우팅하고 싶지만(예: Searx, Transmission) 나머지는 VPN에 바인딩되어 있습니다.작업 그룹 0인터페이스(예: Jellyfin)와 앞으로 내 RPI에 포트를 노출하여 노출하고 싶은 일부 인터페이스(예: Minecraft Server).

현재 내가 사용하고 있는극세사 묶음내 방화벽은 다음의 어떤 ​​것도 차단하지 않습니다.작업 그룹 0동일한 Wireguard 인터페이스의 포트와 전송을 위한 피어 포트도 마찬가지입니다.

내 목표

내 서버에서 내 서버로 연결할 수 있도록 어떤 프로그램이 어떤 방향으로 이동하는지 구성할 수 있는 우아한 솔루션을 찾고 싶습니다.작업 그룹 0어디에나 인터페이스가 있지만 일부 프로그램은 VPN을 사용하여 외부 세계와 통신합니다.

연구 완료

지금까지 저는 Mulvad VPN이 간단한 Wireguard 인터페이스로 사용될 수 있다는 것을 알고 있습니다.출처: 아치위키- 다른 VPN 제공업체에도 동일하게 적용되는 것 같습니다.

또한 Searx와 같은 일부 프로그램의 경우 구성을 통해 특정 인터페이스에 나가는 요청을 바인딩할 수 있는 가능성을 제공할 source_ips뿐만 아니라 구성을 통해 다른 인터페이스에서 수신하도록 주소를 바인딩할 bind_address수도 있다는 것을 알고 있습니다. 즉, 나가는 요청을 다음을 통해 리디렉션할 수 있습니다. VPN을 다운로드하고 내 사이트에서 다운로드하세요.작업 그룹 0회로망.

대부분의 VPN 클라이언트는 이미 임의의 프로그램에 대해 이 분할 터널링 기능을 지원하는 것 같습니다. 이는 클라이언트가 어떻게든 이와 같은 작업을 수행할 수 있음을 의미합니다(VPN 연결에서 특정 프로그램 제거)! 그리고 오픈소스이기 때문에 해결책도 알려져 있어야 합니다.

내 질문/우려사항

이제 이 작업을 수행하고 아웃바운드 Searx를 VPN에 바인딩하고 웹 인터페이스를작업 그룹 0. 이것은 질문 1을 요구합니다. 이 경우 DNS는 어떻게 작동합니까? Searchx가 수행한 모든 DNS 요청은 VPN을 통해 라우팅됩니까? 이것이 자동으로 구성됩니까, 수동으로 구성됩니까, 아니면 지원되지 않을 수도 있습니까?

나는 또한 Docker가 이 도시에서 가장 멋진 도구라는 것을 알고 있으며 사용자가 사전 구성된 환경에서 애플리케이션을 샌드박스화할 수 있게 하여 특정 컨테이너에 대한 네트워크 연결을 강제할 수 있게 해준다는 것도 알고 있습니다. 이로 인해 질문 2가 발생합니다. RPI가 있더라도 이 경우 docker를 사용해야 합니까?

성능상의 이유와 미니멀리즘의 이익을 위해 꼭 필요한 경우가 아니면 Docker를 방정식에서 제외하고 싶습니다. 이로 인해 질문 3이 발생합니다. 프로그램이 허용하지 않는 경우에도 이를 라우팅할 수 있습니까? 특정 인터페이스에 대한 구성 프로그래밍? 이것은 Linux가 뒤에서 수행하는 작업인 것 같습니다. 인터넷에 여러 인터페이스가 연결되어 있는 경우 프로그램 자체가 아니라 프로그램이 사용하는 인터페이스를 결정하는 것은 OS인 것 같습니다. 이에 대한 책임은 누구에게 있습니까?

분명히 VPN 클라이언트가 이 작업을 수행한다는 것을 알면 질문 3은 별 의미가 없고 가능해 보이지만 구현 방법을 잘 모르겠습니다.

마지막으로 질문 4는 보다 일반적인 질문입니다. 프로그램이 IP 주소를 알아야 합니까? Searx에서는 나가는 인터페이스가 아닌 나가는 IP를 지정해야 하기 때문입니다. 대부분의 VPN에는 고정 IP가 있으므로 어쨌든 문제가 되지 않을 것 같습니다. 그렇죠?

작은 메모

말씀드린 대로 Docker에 대해 들어본 적은 있지만 사용을 피하려고 노력하고 있습니다.

저도 iptables에 대해 들어본 적이 있지만 어떻게 사용하는지 모르고 UFW와 충돌한다는 것도 알고 있습니다.

답변1

비슷한 문제가 있습니다. 처음에는 다음을 사용하여 해결했습니다.이 가이드iptables를 사용합니다. 이 방법을 사용하려면 트래픽이 VPN을 사용해야 하는 사용자를 생성해야 합니다. iptables는 애플리케이션별 필터링을 지원하지 않기 때문입니다.

Fedora로 마이그레이션했을 때 방화벽이 iptables의 낮은 수준 사용과 충돌할 수 있다는 점을 우려했고 결국 네트워크 네임스페이스를 사용하여 분할 터널링을 관리하는 대체 방법을 찾았습니다. 기본적으로 네트워크 네임스페이스를 설정하고, VPN 터널을 기본/전용 경로로 설정하고, 네임스페이스 내에서 비공개로 유지하려는 애플리케이션을 실행합니다. 특정 사용자를 유지하지 않아도 된다는 점이 큰 장점인 것 같아요.

하나 있다네임스페이스-openvpn 파이썬 스크립트네임스페이스를 쉽게 만들고 그 안에서 openvpn을 실행할 수 있습니다. 이 저장소에 대한 문서는 매우 기술적이지만네임스페이스-openvpn을 사용한 토렌트 가이드. 여기에 포함된 정보의 대부분은 모든 애플리케이션에 적용되며, 일단 읽어보니 사용자별/iptables 접근 방식보다 설정하기가 훨씬 쉽다는 것을 알았습니다.

관련 정보