따라서 목표는 간단합니다.
- 고용주의 VPN 네트워크에서 원격으로 작업하고 싶습니다.
- 동시에 NordVPN을 통해 다른 모든 것을 라우팅하고 싶습니다.
결국 고용주이든 NordVPN이든 모든 것이 일부 VPN 서비스를 거쳐야 합니다.
하지만 몇 가지 요구 사항이 있습니다.
- NordVPN Threat Protection이 켜져 있어야 합니다(그러므로 DNS 설정을 할 수 없습니다).
- 수동으로 변경하고 싶지 않습니다.
iptables
- 설정이 어느 정도 자동화되기를 원합니다.
답변1
내가 찾은 것은 다음과 같은 초기 설정이었습니다.
- NordVPN에서 일시적으로 연결을 끊습니다.
- 포괄적인 고용주 VPN 설정.
- 키워드 및 / 장치가
ip route
포함된 줄을 참조하세요 .via
tun
tap
- 고용주의 서브넷 목록을 추출합니다.
nordvpn whitelist add subnet CIDR_NOTATION
각 서브넷에 대해 제출하세요.- 모든 개별 주소는 접미사가 포함된 CIDR 표기법
IP
으로 변환되어야 합니다./32
- 모든 개별 주소는 접미사가 포함된 CIDR 표기법
- NordVPN에 다시 연결하세요.
그 후 두 VPN 간에 완벽하게 작동하는 분할 터널링을 달성했습니다. 고용주가 푸시 경로를 변경하지 않는 한 저는 설정에 대해 책임을 지지 않습니다. 이 경우 초기 설정을 다시 진행하면 문제가 해결됩니다.
일부 고용주의 서브넷은 NordVPN과 충돌할 수 있지만, 내 고용주는 기본적으로 10.0.0.0/8을 사용하기 때문에 NordVPN은 충돌하지 않는 다른 노드로 장애 조치되는 것 같습니다.
이것은 나에게 맞는 쉘 스크립트입니다.
#!/bin/bash
set -eo pipefail
function user_can_modify_nordvpn {
groups | grep -qE "nordvpn|root"
}
echo "First thing to do, is that you need to be disconnected from the NordVPN temporarily."
echo " - the reason is to first establish full connection to your office VPN and fetch all the routes provided by it"
echo " - once we know all the office VPN routes, we will whitelist the involved subnets to NordVPN and start it"
echo " - in that point, both VPNs should work fine - office traffic should be routed through office VPN and everything else through the NordVPN"
echo
read -n 1 -r -p "Now, I need you to prepare for a manual action. I will first disconnect you from NordVPN, so be prepared to spin up your office VPN. Are you ready? (Y/n)"
echo
[[ "$REPLY" =~ ^(Nn)$ ]] && exit 1 || true
if user_can_modify_nordvpn; then
nordvpn d
else
sudo nordvpn d
fi
read -n 1 -r -p "NordVPN disconnected. Please spin up your office VPN now. Press any key after you verified successfull connection."
OFFICE_SUBNETS=$(ip route | grep -E "tun|tap" | grep via | awk '{print $1}' | sed 's:^\([^/]\+\)$:\0/32:g' | tee /tmp/office_subnets.txt)
if test "$(echo "$OFFICE_SUBNETS" | wc -l)" -eq 0; then
echo "ERROR: No 'tun'|'tap' devices found in 'ip route'! So no subnets to add for NordVPN whitelisting." >&2
exit 1
fi
for subnet in $OFFICE_SUBNETS; do
if user_can_modify_nordvpn; then
nordvpn whitelist add subnet "$subnet"
else
sudo nordvpn whitelist add subnet "$subnet"
fi
done
if user_can_modify_nordvpn; then
nordvpn c
else
sudo nordvpn c
fi