Как настроить Double VPN с Wireguard?
Я пытаюсь маршрутизировать домашний VPN через NordVPN, но не могу заставить его работать.
По сути, я хочу, чтобы мои интернет-запросы шли: Телефон -> Дом -> NordVPN. Причина в том, что я хочу иметь разделенную VPN, которая может получать доступ к моим домашним устройствам, а также выходить в Интернет без указания моего IP-адреса.
Аппаратное обеспечение
Малина Pi 4
Debian 10
$ uname -srvmpio
Linux 5.10.0-0.bpo.4-arm64 #1 SMP Debian 5.10.19-1~bpo10+1 (2021-03-13) aarch64 unknown unknown GNU/Linux
Программное обеспечение
docker-compose.yml
version: "3.8"
services:
vpn:
image: bubuntux/nordvpn
cap_add:
- NET_ADMIN # Required
- SYS_MODULE # Required for NordLynx
sysctls:
- net.ipv4.conf.all.rp_filter=2 # Required for Nordlynx
devices:
- /dev/net/tun # Required
environment:
- USER=${NORDVPN_USERNAME}
- PASS=${NORDVPN_PASSWORD}
- CONNECT=${NORDVPN_CONNECT}
- TECHNOLOGY=NordLynx
- TZ=${TZ}
- PORTS=64444;51820
- CYBER_SEC=Enable
ports:
- 64444:51820
wireguard:
image: ghcr.io/linuxserver/wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
TZ: ${TZ}
SERVERURL: ${URL}
PEERS: peer1,peer2
# INTERNAL_SUBNET: 10.13.13.0 #optional
depends_on:
- vpn
volumes:
- ${DOCKERCONFIG}/wireguard:/config
- /lib/modules:/lib/modules:ro
network_mode: service:vpn
Он работает без vpn, благодаря переадресации портов.
Кто-нибудь знает, как это сделать?
Большое спасибо :)
1 ответ
https://unix.stackexchange.com/a/365296 - был для меня ответом. Добавив разрешения на маршрутизацию для Wireguard для прохождения через мостовую сеть контейнера NordVPN при ответе на соединение, в отличие от попытки маршрутизации через сервер NordVPN, я смог подключить клиента, который затем перенаправлял трафик через Wireguard, а затем на NordVPN.
Во-первых, я дал определенную частную IP-подсеть 172.18.0.0/24:
networks:
private:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.0.0/24
Затем прикрепил его к контейнеру NordVPN:
networks:
private:
ipv4_address: 172.18.0.2
Это позволило мне определить маршрут в контейнере Wireguard:
ip rule add from 172.18.0.2 table 128 # interface IP for container eth0 on the NordVPN network stack we specified in networks -> private -> ipv4_address
ip route add table 128 to 172.18.0.0/24 dev eth0 # the subnet range for NordVPN container eth0 interface
ip route add table 128 default via 172.18.0.1 # the default gateway
Мое довольно неэлегантное и ограниченное по времени решение заключалось в том, чтобы вызывать эти команды через сценарий запуска bash, как показано ниже, однако есть гораздо лучшие и более последовательные способы сделать это, на изучение которых у меня не было времени.
./start-wireguard-nordvpn.sh
# bring down if up then start
docker-compose down
docker-compose up -d
# run ip route commands, wireguard = container_name in compose
docker exec -it wireguard ip rule add from 172.16.0.2 table 128
docker exec -it wireguard ip route add table 128 to 172.16.0.0/24 dev eth0
docker exec -it wireguard ip route add table 128 default via 172.16.0.1
Отправка файла Compose для потомков:
---
version: "3.3"
services:
vpn:
image: ghcr.io/bubuntux/nordvpn
container_name: nordvpn
cap_add:
- NET_ADMIN # Required
- SYS_MODULE
ports:
- $EXTERNAL_WG_PORT:51820/udp
environment: # Review https://github.com/bubuntux/nordvpn#environment-variables
- USER=$NORDUSR # Required
- PASS=$NORDPW # Required
- CONNECT=$COUNTRY
- TECHNOLOGY=NordLynx
- NETWORK=172.18.0.0/24 # So it can be accessed within the local network
- PORTS=$EXTERNAL_WG_PORT;51820
- FIREWALL=Enable
- KILLSWITCH=Enable
- CYBER_SEC=Enable
- DNS=$NV_DNS
sysctls:
- net.ipv4.conf.eth0.rp_filter=2
devices:
- /dev/net/tun
restart: unless-stopped
networks:
private:
ipv4_address: 172.18.0.2
wireguard:
image: ghcr.io/linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ
- SERVERURL=$FQDN #optional
- SERVERPORT=$EXTERNAL_WG_PORT #optional
- PEERS=3 #optional
- PEERDNS=$WG_DNS #optional
- INTERNAL_SUBNET=172.21.88.0/24 #optional
- ALLOWEDIPS=$ALLOWEDIPS
volumes:
- ./config:/config
- ./modules:/lib/modules
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
network_mode: service:nordvpn
restart: unless-stopped
depends_on:
- nordvpn
networks:
private:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.0.0/24