軽量のP2PメッシュVPNをTincで作成する方法

下に鍵のあるクラウドのグラフィックレンダー

Tincは、Linux、Windows、およびmacOSでプライベートピアツーピア(P2P)メッシュネットワークを簡単に作成できるオープンソースの仮想プライベートネットワーク(VPN)アダプターです。OpenVPNやWireguardと同様に、異なるネットワークトポロジーにまたがる複数のコンピュータを単一の仮想LANにリンクさせることができます。ここでは、Tincを使用する利点と、Tincベースのシンプルなメッシュネットワークをインストールして作成する方法を示します。

WireguardやOpenVPNよりTincを使う理由は?

Tincのユニークなセールスポイントの1つは、他のVPNデーモンとは異なり、メッシュネットワークを設計していることです。これは、Wireguardとは異なり、ネットワーク条件の変化に簡単に適応できることを意味します。これにより、特にネットワーク接続が不安定なコンピュータにとって、より耐障害性が高くなります。

UbuntuでのTincのパフォーマンス測定を示すターミナル

それに加えて、TincはOpenVPNのような従来のVPNで期待されるほとんどの機能も享受しています。これには、NAT環境を通過する能力、暗号化トンネルの作成、およびLAN専用アプリケーションのリンクが含まれます。

DebianでのTincのpingパフォーマンスを示すターミナル

最後に、Tincは、ネットワーク内で行うすべての接続をP2Pにすることを目指しています。これは、自動ピア発見または公開アクセス可能なTincサーバーとの調整を通じて行うことができます。その結果、Tinc VPN内の接続は堅牢であるだけでなく、迅速で応答性があります。

知っておくべきこと: どのVPNを選ぶかまだ決めかねてる?私たちの記事をチェックして、WireguardとOpenVPNが互いにどう比較されるか見てみましょう。

LinuxにTincをインストールする

Tincをインストールする最初のステップは、システムが最新であることを確認することです。Ubuntuでは、次のコマンドを実行します:

sudo apt update && sudo apt upgrade -y

TincをUbuntuのパッケージリポジトリから直接ダウンロードしてインストールします:

sudo apt install tinc

UbuntuでのTincのパッケージインストールプロセスを示すターミナル

他のLinuxディストリビューションにTincをインストールするには、そのシステムに適切なパッケージマネージャーを使用します。例えば、Fedoraではsudo dnf install tincを実行してプログラムを取得する必要があります。

Fedora Linuxでのインストールプロセスを示すターミナル

tincd --versionを実行して、Tincが適切にインストールされていることを確認します。

Ubuntuで実行中のTincの現在のバージョンを示すターミナル

Tincを使用して基本的なメッシュネットワークを作成する

マシンにTincがインストールされたので、最初のTincベースのネットワークを構成できます。「/etc/tinc」内に新しいフォルダーを作成します。これには、Tincノードに関連するすべてのファイルが含まれます:

sudo mkdir -p /etc/tinc/mynetwork/hosts

お気に入りのテキストエディタを使用して新しい設定ファイルを作成します:

sudo nano /etc/tinc/mynetwork/tinc.conf

新しい設定ファイルに次のコードブロックを貼り付けます:

Name = mynode  
Device = /dev/net/tun

注意: 一部のLinuxディストリビューションでは、/dev内のtunアダプタの場所が変更されることがあります。システムの正確なパスを見つけるには、次のコマンドを実行します:

find /dev -name *tun* -type c

Tincノードの名前のテキストファイルを「hosts」フォルダー内に作成し、その中に次の情報を貼り付けます:

Subnet = 192.168.11.1/32  
Address = YOUR-MACHINE-IP-ADDRESS-HERE  
Port = 655

「Address」変数の値を、マシンのIPアドレスに置き換えます。ip addrを実行してこれを見つけることができます。

UbuntuマシンのプライベートIPアドレスを強調表示するターミナル

注意: 公開アクセス可能なVPNを作成する場合は、マシンのパブリックIPアドレスを提供する必要があります。

マシンのホストファイルを保存したら、次に「/etc/tinc/mynetwork」内に2つのファイルを作成します:

sudo touch /etc/tinc/mynetwork/tinc-{up,down}  
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

「tinc-up」ファイルを開き、次のBashコードをその中に貼り付けます。これにより、Tinc用の仮想ネットワークインターフェースが作成され、そのインターフェースにIPアドレスが割り当てられます:

#!/bin/sh  
  
ip link set $INTERFACE up  
ip addr add 192.168.11.1/32 dev $INTERFACE  
ip route add 192.168.11.0/24 dev $INTERFACE

ファイルを保存したら、「tinc-down」ファイルを開き、次の内容も貼り付けます。このコードは「tinc-up」の逆の処理を行い、TincインターフェースからIPアドレスを解除し、そのインターフェースをマシンから取り除きます:

#!/bin/sh  
  
ip route del 192.168.11.0/24 dev $INTERFACE  
ip addr del 192.168.11.1/32 dev $INTERFACE  
ip link set $INTERFACE down

Ubuntuでのtinc-downスクリプトの内容を示すターミナル

Tincノードのキー対を生成するには、tincdを実行します:

sudo tincd -n mynetwork --generate-keys=4096

Enterを2回押して、Tincノードにおけるプライベートおよびパブリックキーのデフォルト保存場所を受け入れます。

UbuntuでのTincのキー対生成プロセスを示すターミナル

最初のTincクライアントの追加

新しいTincクライアントを追加するには、まず2台目のマシンにTincを正しくインストールしたことを確認します。

DebianでのTincのバージョンを示すターミナル

mkdir -pを使用して、Tincの設定用のディレクトリ構造を作成します。

お気に入りのテキストエディタを使用して、Tincクライアントの設定ファイルを作成します:

sudo nano /etc/tinc/mynetwork/tinc.conf

2台目のマシンの設定ファイルに次のコード行を貼り付けます:

Name = myclient  
Device = /dev/net/tun  
ConnectTo = mynode

自分のTincマシンの名前で「/etc/tinc/mynetwork/hosts」内にファイルを作成します。この場合、2台目のマシンを「myclient」と名付けたので、「myclient」という名前のファイルを作成します:

sudo nano /etc/tinc/mynetwork/hosts/myclient

新しいホストファイルに次のブロックのコードを貼り付けます。最初のノードと同様に、これはTincデーモンのネットワーク構成を示します:

Subnet = 192.168.11.2/32  
Port = 655

新しいホストファイルを保存し、次に2台目のマシンで「tinc-up」および「tinc-down」スクリプトを作成します:

sudo touch /etc/tinc/mynetwork/tinc-{up,down}  
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

お気に入りのテキストエディタを使ってtinc-upファイルを開き、次のブロックのコードを貼り付けます:

#!/bin/sh  
ip link set $INTERFACE up  
ip addr add 192.168.11.2/32 dev $INTERFACE  
ip route add 192.168.11.0/24 dev $INTERFACE

tinc-upファイルを保存したら、tinc-downを開き、次のコード行を貼り付けます:

#!/bin/sh  
  
ip route del 192.168.11.0/24 dev $INTERFACE  
ip addr del 192.168.11.2/32 dev $INTERFACE  
ip link set $INTERFACE down

Tincクライアントの設定を完了させるために、キー対を生成します:

sudo tincd -n mynetwork --generate-keys=4096

2台目のTincマシンでのキー対生成プロセスを示すターミナル

Tincメッシュネットワークを実行する

この時点で、正しく構成された2つのTincデーモンがあります。しかし、これら2つのTincデーモンをリンクさせて、LinuxでP2P VPNを作成する必要があります。そのためには、Tincノードのホスト設定ファイルをクライアントにコピーし、逆にクライアントのホスト設定ファイルをTincノードにコピーする必要があります。

まず、ノードのターミナルセッションを開き、「/etc/tinc/mynetwork/hosts」ディレクトリに移動します:

cd /etc/tinc/mynetwork/hosts

このディレクトリ内の設定ファイルをコピーし、クライアントに転送します。私のケースでは、scpを使ってこのファイルをsshで送信します:

scp ./mynode YOUR-CLIENT-IP-ADDRESS:~

1つのシステムから別のシステムにTincクライアント設定を転送するプロセスを示すターミナル

注意: この例ではscpを使用しましたが、USBフラッシュドライブを使用して手動で転送することもできます。

クライアントマシンに移動し、先ほど転送したホストファイルをクライアントの「/etc/tinc/mynetwork/hosts」フォルダにコピーします:

sudo cp -v ~/mynode /etc/tinc/mynetwork/hosts/

その後、クライアントマシン側でscpを実行して、クライアントのホストファイルをノードに転送します:

scp /etc/tinc/mynetwork/hosts/myclient YOUR-NODE-IP-ADDRESS:~

クライアントのホストファイルをノードのホストディレクトリにコピーします:

sudo cp ~/myclient /etc/tinc/mynetwork/hosts/

余談: インターネット上の個人のプライバシーが気になりますか?Linux PCのプライバシーとセキュリティを向上させる方法について学びましょう。

Tincメッシュネットワークの起動

完全に構成されたTincネットワークを起動するには、各ホストで次のコマンドを実行します:

sudo tincd -n mynetwork

Tincインターフェースを介してノード間の通信ができることを確認するために、シンプルなpingを実行します:

ping -c 5 192.168.11.2

UbuntuでのTinc VPNのレイテンシとネットワークデバイスを示すターミナル

最後に、Tincサービスを有効にして、VPNがシステム起動時に機能するようにします:

sudo systemctl enable --now [email protected]

LinuxでTincを使用して独自のP2PメッシュVPNを作成する方法を学ぶことは、コンピュータネットワーキングのこの素晴らしい世界を探検する第一歩に過ぎません。この技術の詳細については、私たちの包括的なVPNの概要をチェックしてみてください。

画像クレジット: Growtika via Unsplash. すべての変更およびスクリーンショットはRamces Redによるものです。