내 Ubuntu 서버에서 서로 다른 두 국가 A와 B에 여러 VPN 연결을 설정하고 싶습니다. 그런 다음 온라인에 접속할 때 어떤 VPN 연결을 사용해야 하는지 결정하기 위해 GeoIP 기반 규칙을 설정하고 싶습니다. 내가 탐색 중인 웹사이트가 A 국가에 있으면 VPN을 사용하여 A에 연결해야 하고, 해당 웹 사이트가 B 국가에 있으면 연결 B를 사용해야 하며, A 국가도 B 국가에도 없으면 연결 B를 사용해야 합니다. VPN 연결을 사용하면 안 됩니다(기본값은 내 DSL 연결이어야 합니다).
설정할 수 있나요?
답변1
나는 이 작업을 완전히 자동으로 원활하게 수행하는 "즉시 사용 가능한" 솔루션을 모릅니다. 가능한. 내가 할 수 있는 일은 "상위 수준"의 요약을 제공하는 것뿐입니다.
기본적으로 라우팅 문제에 대해 생각하고 있습니다. 특정 서브넷으로 향하는 트래픽이 다른 게이트웨이 IP 주소를 통과하기를 원합니다. 동적 솔루션 없이 살고 싶다면 다음을 수행할 수 있습니다.
- "다른 국가"의 트래픽을 나타내는 서브넷과 사용하려는 VPN을 알아보세요. 예를 들어, 10.4.0.0/16의 항목이 다른 국가에 있고 VPN을 통하지 않고는 나가기를 원하지 않는다고 가정해 보겠습니다. 모뎀이 연결되어
eth0
있고 ISP의 기본 게이트웨이 IP가 있습니다. - VPN 공급자가 각 VPN에 대해 가상 네트워크 어댑터를 생성하는 프로토콜을 사용하는 경우 훨씬 쉬울 것입니다(예: OpenVPN은 가상
tun0
인터페이스를 생성하고 PPTP는 유사한 작업을 수행합니다(제 기억이 정확하다면)). IPSec으로 인해 문제가 발생할 수 있습니다. 적절한 구성 파일을 제공하고tun0
이를 생성하는 멋진 OpenVPN 기반 공급자가 있다고 가정해 보겠습니다. - 이
ip route
명령을 사용하여 10.4.0.0/16으로 향하는 시스템에서 나가는 모든 트래픽이 종료되어야 함을 의미하는 새 경로를 만듭니다tun0
. 실제 기본 게이트웨이에서 항상 사용되도록 적절한 측정항목을 할당해야 합니다. - 진정한 보안을 위해 기본 게이트웨이(실제 NIC)에서
iptables
10.4.0.0/16으로의 모든 트래픽을 차단하는 몇 가지 규칙을 생성할 수 있습니다.eth0
이렇게 하면 누출이 방지됩니다. ip route
시작 시 실행되는 스크립트에 명령을 넣어야 합니다 .- 두 번째 IP 범위 및 VPN에 대해 이 작업을 다시 수행하세요.
- 그러면 이 두 IP 범위 내에 없는 트래픽은 무시됩니다
eth0
(즉, 기본 게이트웨이).
whois
특정 유형의 CDN 프런트 엔드를 사용하지 않는 한 원격 사이트 ISP의 IP 범위를 사용하여 쉽게 찾을 수 있습니다 . CDN 프런트엔드(예: Cloudflare)를 사용하는 경우 웹 사이트가 완전히 다른 위치에서 오는 것처럼 보입니다. 이 경우, squid
예를 들어 URL 콘텐츠에 따라 트래픽을 다른 IP로 리디렉션할 수 있는 HTTP 계층 프록시를 사용하는 것이 좋습니다 .