몇 주 동안 저는 NordVPN 클라이언트 및 게이트웨이/라우터 역할을 하도록 Mac에서 Linux 가상 머신을 설정하여 VPN 연결을 통해 LAN에 있는 특정 장치의 모든 트래픽을 전달하는 방법을 고민했습니다.
내 설정:
- 내 LAN 서브넷은 192.168.2.0/24입니다.
- Parallels Desktop Pro 17.0.1이 설치되어 있고 macOS Big Sur 11.6을 실행하는 Mac Pro가 있고 유선 이더넷을 사용하여 LAN에 연결되어 있습니다.
- Parallels에서는 Ubuntu 21.04 가상 머신을 설정했습니다. 가상 머신은 두 개의 NIC(
enp0s5
및 ) 로 구성됩니다enp0s6
. - 두 가상 머신 NIC는 모두 호스트의 기본 유선 어댑터에 브리지되며 둘 다 LAN의 DHCP 서버에서 IP를 수신합니다.
- 가상 머신에는 NordVPN이 설치되어 작동하며 Nordlynx(Wireguard)를 프로토콜로 사용하도록 구성되어 있습니다.
내 의도는 가상 머신을 사용하여 enp0s5
인터넷에 액세스하고 NordVPN에 연결하는 동시에 enp0s6
LAN의 다른 장치로부터 트래픽을 수신하고 VPN을 통해 전달하는 수신 인터페이스로도 사용하는 것입니다.
먼저 VPN에 연결합니다.
$ nordvpn connect us
Connecting to United States #6918 (us6918.nordvpn.com)
You are connected to United States #6918 (us6918.nordvpn.com)!
그 후 내 인터페이스는 다음과 같습니다.
$ ifconfig
enp0s5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.76 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:1c:42:b9:d5:a3 txqueuelen 1000 (Ethernet)
RX packets 120786 bytes 157627189 (157.6 MB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 17840 bytes 1450595 (1.4 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.64 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:1c:42:59:54:ba txqueuelen 1000 (Ethernet)
RX packets 11342 bytes 3589378 (3.5 MB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 277 bytes 77293 (77.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 948 bytes 99424 (99.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 948 bytes 99424 (99.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
nordlynx: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1420
inet 10.5.0.2 netmask 255.255.255.255 destination 10.5.0.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 39 bytes 14380 (14.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 61 bytes 11396 (11.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
여기에서 간단한 속도 및 연결 테스트를 수행했는데 VPN 연결이 제대로 작동했습니다.
nordlynx
좋습니다. 이제 해당 인터페이스를 통해 네트워크의 다른 장치에서 enp0s6 인터페이스로 보낸 모든 트래픽을 전달 하려고 합니다 . 그래서 저는 이렇게 합니다:
iptables --flush
iptables --table nat --flush
iptables --table nat --append POSTROUTING --out-interface nordlynx -j MASQUERADE
iptables --append FORWARD --in-interface enp0s6 -j ACCEPT
또한 IP 전달이 활성화되어 있는지 확인했습니다.
$ cat /proc/sys/net/ipv4/ip_forward
1
마지막으로 게이트웨이 기능을 테스트하기 위해 LAN에 있는 다른 노트북(Macbook Pro)에 고정 IP를 구성하고 기본 게이트웨이를 enp0s6
내 가상 머신의 IP( 192.168.2.64
)로 설정했습니다.
그런 다음 Macbook에서 웹 검색을 시도했지만 작동하지 않았습니다.
내가 무엇을 놓쳤거나 잘못했나요? 이 문제를 어떻게 가장 잘 해결할 수 있습니까?
얼마나 멀리 갔는지 확인하기 위해 Macbook Pro에서 경로 추적을 시도했지만 Ubuntu VM을 기본 게이트웨이로 설정하여 로컬 LAN 서브넷 외부의 IP를 추적하면 다음과 같은 결과만 나타납니다.
$ traceroute 37.156.192.50
traceroute: findsaddr: write: No such process
Linux VM의 라우팅 테이블은 다음과 같습니다.
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 nordvpn-gw 128.0.0.0 UG 0 0 0 nordlynx
default _gateway 0.0.0.0 UG 100 0 0 enp0s5
default _gateway 0.0.0.0 UG 101 0 0 enp0s6
128.0.0.0 nordvpn-gw 128.0.0.0 UG 0 0 0 nordlynx
unn-138-199-52- _gateway 255.255.255.255 UGH 0 0 0 enp0s5
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s6
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s5
192.168.2.0 0.0.0.0 255.255.255.0 U 101 0 0 enp0s6
도움이나 조언을 보내주셔서 감사합니다. 감사해요!
고쳐 쓰다:@AB의 의견에 따라 VM에서 하나의 네트워크 카드만 사용하도록 설정을 단순화하려고 시도했지만 아무런 차이가 없었습니다.