概要
NordVPN の Mesh Network 機能を用いて、外部のネットワークからホームネットワーク内のデバイスに踏み台サーバ経由でアクセスできるようにする。
さらに Traffic Routing を用いて、クライアントからホームネットワーク内のデバイスに LAN の IP を使用してアクセスできるようにする。
Bastion 側の設定
NordVPN クライアントのインストール
NordVPN クライアントをインストールする:
sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)
sudo usermod -aG nordvpn $USER
nordvpn login
(参考:https://nordvpn.com/ja/download/linux/)
初期設定
ホームネットワーク内における接続に VPN が適用されないようにする (例:subnet が 192.168.8.0/24
の場合):
$ nordvpn allowlist add subnet 192.168.8.0/24
NordVPN に接続する
$ nordvpn connect
メッシュネットワークを有効化する。
$ nordvpn set meshnet on
# Check peer list
$ nordvpn mesh peer list
Mesh Network に登録した Peer ノードには、<username>-<moutnain>.nord
のようなドメインが自動で割り当てられる。
(参考:- https://meshnet.nordvpn.com/getting-started/how-to-start-using-meshnet/using-meshnet-on-linux)
NordVPN Token を作成
NordVPN Dashboard ページ内にある NordVPN を手動で設定
のリンク先よりアクセストークンを発行する。
Crontab で NordVPN へのログインを自動化する
Bastion 側を常に NordVPN に接続したままにするため、crontab -e
を実行し、crontab に次のコマンドを登録する。次の例では 半日に1回 NordVPN にログインする。
0 0,12 * * * nordvpn login --token <nordvpn_token> && nordvpn connect
<nordvpn_token>
には上の手順で作成したトークンを用いる。
Traffic routing の許可
手順は https://meshnet.nordvpn.com/features/routing-traffic-in-meshnet に従う。
ピアのホスト名は nordvpn mesh peer list
から確認する。
$ nordvpn mesh peer routing allow <peer_host>
$ nordvpn mesh peer local allow <peer_host>
$ nordvpn set lan-discovery enable
Laptop 側の設定
NordVPN クライアントをインストール
https://nordvpn.com/ja/download に従って、ラップトップに NordVPN クライアントをインストールする(本記事では Macbook を使用する)。
NordVPN クライアントを起動およびログインし、クイック接続
ボタンを押すか地図上の地域を選択して NordVPN サーバに接続する。
Mesh Network の有効化
次の手順により Traffic routing を有効化する。
- 左メニューの Mesh Network 設定のアイコンを選択する
- メッシュネットワークを有効化する
-
すべてのトラフィックをルーティング
をクリックする
SSH 設定
~/.ssh/config
に踏み台の情報を追加する。
Host bastion
User <bastion-user>
Hostname <username>-alps.nord
Host server
ProxyCommand ssh <bastion-host> -W %h:%p
User <server-user>
Hostname 192.168.8.20
次のコマンドを実行し、別ネットワーク上のクライアントから、ホームネットワーク上のデバイスに LAN 内の IP に SSH でログインできることを確認する。
ssh server
まとめ・感想
ラップトップと踏み台サーバからなる Mesh Network を作成し、外部ネットワークからホームネットワークにリモート接続できること、および Traffic Routing で LAN の IP を用いてホストが解決できることを確認した。
Mesh Network では NordVPN を仲介し、クライアント同士で VPN を確立するため、踏み台サーバを外部ネットワークに公開する必要がない利点がある。
一方、筆者の環境だけかもしれないが、クライアント側 (Macbook Pro M2) から Mesh Network へに再接続しようとすると失敗したり、Traffic Routing を適用して SSH ログインすると通信が非常に低速になるなど、不安定さが気になる場面がいくつかあった。このあたりで改善できる部分があれば、後に追記する予定...。