Wireguard VPN接続を介してすべてのトラフィックをルーティングするためにLinux仮想マシンをゲートウェイに正しく設定するにはどうすればよいですか?

Wireguard VPN接続を介してすべてのトラフィックをルーティングするためにLinux仮想マシンをゲートウェイに正しく設定するにはどうすればよいですか?

数週間、私は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に接続し、同時にenp0s6LAN上の他のデバイスからトラフィックを受信し、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つのネットワークカードのみを使用するように設定を簡素化しようとしましたが、違いはありませんでした。

関連情報