数週間、私は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 仮想マシンをセットアップしました。仮想マシンは2つの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でWeb検索を試しましたが、うまくいきませんでした。
私は何を逃したか間違っていますか?この問題をどのように最適に解決できますか?
どのくらいの距離に行ったかを確認するために、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で1つのネットワークカードのみを使用するように設定を簡素化しようとしましたが、違いはありませんでした。