내 장치에 Tailscale 네트워크의 VPS로 라우팅되는 Tailscale 네트워크가 있는 설정을 구현하려고 합니다.출구 노드, 그러나 출구 노드는 ProtonVPN 라인맨 터널을 통해 관련 트래픽을 전달할 수 있습니다. 이에 대한 주된 동기는 내 Android 클라이언트가 한 번에 하나의 "상시 연결" VPN 연결만 가질 수 있다는 것입니다. 이를 위해서는 다음 중에서 선택해야 합니다.누구나Tailscale 또는 ProtonVPN에 연결하세요.
동시에 출구 노드에서 "종료"되는 트래픽(예: VPS의 Tailscale IP에 대한 SSH 연결)이 업스트림 VPN으로 전달되지 않도록 하고 싶습니다. Tailscale에 익숙하지 않은 사람들을 위해 tailscale0
Tailscale이라는 도구를 제공합니다 .100.64.0.0/10 장치 범위. 또한 VPS 호스트에는 HTTP/HTTPS를 통해 공용 인터넷에 웹 서비스를 노출하는 여러 Docker 컨테이너가 있으며 이러한 서비스에 계속 액세스할 수 있기를 원합니다.
아래 다이어그램에는 필요한 설정(및 VPS의 네트워크 인터페이스)이 요약되어 있습니다.
net.ipv4.ip_forward = 1
VPS 종료 노드에서 IP 전달을 설정 하고 활성화했습니다 net.ipv6.conf.all.forwarding = 1
. 저는 ufw가 활성화된 Ubuntu 22.04를 실행하고 있으며 포트 80, 443 및 SSH를 허용합니다.
ProtonVPN이 제공하는 와이어가드 구성은 다음과 같습니다.
[Interface]
PrivateKey = <REDACTED>
Address = 10.2.0.2/32
DNS = 10.2.0.1
[Peer]
PublicKey = <REDACTED>
AllowedIPs = 0.0.0.0/0
Endpoint = <PROTON VPN SERVER>:51820
이 구성을 설정했지만 /etc/wireguard/wgpvpn0.conf
실행하면 wg-quick up wgpvpn0
더 이상 VPS에 SSH로 연결할 수 없으며(공용 인터넷 인터페이스 또는 Tailscale 인터페이스를 통해) 공용 인터페이스를 통해 노출된 포트 80/443에서 호스팅되는 모든 서비스에 더 이상 액세스할 수 없습니다. 나는 이것이 모든 트래픽의 기본 게이트웨이가 되는 인터페이스 AllowedIPs = 0.0.0.0/0
때문 이라고 생각합니다 .wgpvpn0
해결책은 방화벽/라우팅 규칙을 추가하기 위해 wireguard 구성을 사용하는 것이라고 생각 PreUp/PostDown
하지만 iptables에 익숙하지 않아 무엇을 추가해야 할지 잘 모르겠습니다. 나에게 필요한 규칙은 다음과 같다고 생각합니다.
- 다음과 같은 특성을 가진 모든 트래픽최종 목적지100.64.0.0/10 범위의 네트워크는 Tailscale 네트워크 인터페이스로 관리되어야 합니다.
- 무엇이든최종 목적지Tailscale 출구 노드 IP 정보는 출구 노드에서 처리해야 합니다. 나는 위의 규칙이 Tailscale 인터페이스를 통해 이것을 처리할 것이라고 생각합니다.
- 다음과 같은 특성을 가진 모든 트래픽최종 목적지VPS의 공용 IP에 대한 정보는 VPS에 의해 처리되어야 합니다(예:
ens3
인터페이스를 통해 수신되고 내 VPS에서 실행되는 역방향 프록시에 의해 처리됨). - 내 Tailscale 네트워크(Tailscale 인터페이스에 의해 수신됨을 의미함)에서 VPS 종료 노드로 전달되는 모든 트래픽은 다음과 같습니다.최종 목적지공용 인터넷의 네트워크는 ProtonVPN Lineman 인터페이스를 통해 라우팅되어야 합니다. 그에 따라 반대 방향의 반응이 흘러야 합니다. (예를 들어 Tailscale 네트워크를 통해 google.com Android 클라이언트에 로그인 요청 -> tailscale 네트워크의 VPS -> VPS의 ProtonVPN 터널 -> 인터넷을 통해 Google 서버에 로그인 응답 -> VPS의 ProtonVPN 터널 -> tailscale 네트워크 VPS 켜기 -> Android Tailscale 네트워크의 클라이언트)
- VPS의 모든 트래픽은 ProtonVPN 터널(현재 0.0.0.0/0이 사용됨)을 사용해야 합니다.
누구든지 도와줄 수 있나요?