前書き
このチュートリアルでは、オープンソースの仮想プライベートネットワーク(VPN)デーモンであるTincを使用して、サーバーがローカルネットワーク上にあるかのように通信できる安全なVPNを作成する方法について説明します。 また、Tincを使用してプライベートネットワークへの安全なトンネルをセットアップする方法も示します。 Ubuntu 14.04サーバーを使用しますが、構成は他のOSでの使用に適合させることができます。
Tincの便利な機能には、暗号化、オプションの圧縮、自動メッシュルーティング(可能な場合、VPNトラフィックが通信サーバー間で直接ルーティングされる)、簡単な拡張などがあります。 これらの機能は、TincをOpenVPNなどの他のVPNソリューションと区別し、地理的に分散している多くの小規模ネットワークからVPNを作成するための優れたソリューションにします。 Tincは、Linux、Windows、Mac OS Xなどの多くのオペレーティングシステムでサポートされています。
[.note]#Note: TincメッシュVPNをすばやく簡単にセットアップしたい場合は、次のチュートリアルを確認してください:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure。
#
前提条件
このチュートリアルを完了するには、少なくとも3台のUbuntu 14.04サーバーでルートアクセスが必要です。 ルートアクセスを設定する手順は、ここにあります(ステップ3および4):Initial Server Setup with Ubuntu 14.04。
独自の環境でこれを使用することを計画している場合は、サーバーが相互にアクセスする方法を計画し、このチュートリアルに示されている例を独自のニーズに合わせて調整する必要があります。 これを独自の設定に適応させる場合は、例で強調表示されている値を独自の値に置き換えてください。
このチュートリアルを正確に実行する場合は、プライベートネットワーキングを使用して同じデータセンターに2つのVPSを作成し、別のデータセンターに別のVPSを作成します。 NYC2データセンターに2つのVPSを作成し、AMS2データセンターに1つのVPSを次の名前で作成します。
-
externalnyc:すべてのVPNノードがこのサーバーに接続します。適切なVPN機能を実現するには、接続を維持する必要があります。 必要に応じて、追加のサーバーをこのサーバーと同様に構成して、冗長性を提供できます。
-
internalnyc:privateネットワークインターフェースを使用してexternalnycVPNノードに接続します
-
ams1:パブリックインターネット経由でexternalnycVPNノードに接続します
私たちの目標
設定するVPNの図を次に示します(前提条件で説明)。
緑はVPNを表し、灰色はパブリックインターネットを表し、オレンジはプライベートネットワークを表します。 ams1がプライベートネットワークにアクセスできない場合でも、3つのサーバーはすべてVPNで通信できます。
Tincをインストールして始めましょう!
Tincをインストール
プライベートネットワークに参加する各VPSで、Tincをインストールします。 aptを更新することから始めましょう。
sudo apt-get update
次に、aptを介してTincをインストールします。
sudo apt-get install tinc
Tincがインストールされたので、Tincの構成を見てみましょう。
チンク構成
Tincは「ネット名」を使用して1つのTinc VPNを別のものと区別します(複数のVPNの場合)。1つのVPNの構成のみを計画している場合でも、ネット名を使用することをお勧めします。 簡単にするために、VPNを「netname」と呼びます。
VPNの一部となるすべてのサーバーには、次の3つの構成コンポーネントが必要です。
-
構成ファイル:tinc.conf、tinc-up、およびtinc-downなど。
-
Public/private key pairs: For encryption and node authentication
-
ホスト構成ファイル:公開鍵およびその他のVPN構成が含まれています
externalnycノードを構成することから始めましょう。
externalnycを構成する
externalnycで、「netname」と呼ばれるVPNの構成ディレクトリ構造を作成します。
sudo mkdir -p /etc/tinc/netname/hosts
編集用にtinc.confを開きます。
sudo vi /etc/tinc/netname/tinc.conf
次の行を追加します。
Name = externalnyc
AddressFamily = ipv4
Interface = tun0
これは、「tun0」と呼ばれるIPv4を使用するネットワークインターフェイスを使用して、externalnycと呼ばれるノードを構成するだけです。 保存して終了します。
次に、externalnycホスト構成ファイルを作成しましょう。
sudo vi /etc/tinc/netname/hosts/externalnyc
次の行を追加します(VPSのパブリックIPアドレスをここに置き換えます):
Address = externalnyc_public_IP
Subnet = 10.0.0.1/32
最終的に、このファイルは、このサーバーと通信するために他のサーバーで使用されます。 アドレスは他のノードがこのサーバーに接続する方法を指定し、サブネットはこのデーモンがサービスを提供するサブネットを指定します。 保存して終了します。
次のコマンドを使用して、このホストの公開/秘密キーペアを生成します。
sudo tincd -n netname -K4096
これにより、秘密鍵(/etc/tinc/netname/rsa_key.priv)が作成され、最近作成したexternalnycホスト構成ファイル(/ etc / tinc / netname / hosts /)に公開鍵が追加されます。 externalnyc)。
次に、netname VPNが開始されるたびに実行されるスクリプトであるtinc-up
を作成する必要があります。 今すぐ編集用にファイルを開きます。
sudo vi /etc/tinc/netname/tinc-up
次の行を追加します。
#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0
VPNを起動すると、このスクリプトが実行され、VPNが使用するネットワークインターフェイスが作成されます。 VPNでは、このサーバーのIPアドレスは10.0.0.1になります。
VPNが停止したときにネットワークインターフェイスを削除するスクリプトも作成します。
sudo vi /etc/tinc/netname/tinc-down
次の行を追加します。
#!/bin/sh
ifconfig $INTERFACE down
保存して終了します。
最後に、tincネットワークスクリプトを実行可能にします。
sudo chmod 755 /etc/tinc/netname/tinc-*
保存して終了します。
他のノードに進みましょう。
internalnycとams1を構成する
これらの手順は、internalnycとams1の両方で必要ですが、わずかな違いがあります。
internalnycとams1で、「netname」と呼ばれるVPNの構成ディレクトリ構造を作成し、Tinc構成ファイルを編集します。
sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf
次の行を追加します(名前をノード名に置き換えます)。
Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc
これらのノードは、「externalnyc」(この前に作成したノード)への接続を試行するように構成されています。 保存して終了します。
次に、ホスト構成ファイルを作成しましょう。
sudo vi /etc/tinc/netname/hosts/node_name
internalnycの場合、次の行を追加します。
Subnet = 10.0.0.2/32
ams1の場合、次の行を追加します。
Subnet = 10.0.0.3/32
数字が異なることに注意してください。 保存して終了します。
次に、キーペアを生成します。
sudo tincd -n netname -K4096
そして、ネットワークインターフェイス起動スクリプトを作成します。
sudo vi /etc/tinc/netname/tinc-up
internalnycの場合、次の行を追加します。
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0
ams1の場合、次の行を追加します。
ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0
これらのIPアドレスは、VPNでこれらのノードにアクセスする方法です。 保存して終了します。
次に、ネットワークインターフェイス停止スクリプトを作成します。
sudo vi /etc/tinc/netname/tinc-down
そして、次の行を追加します。
ifconfig $INTERFACE down
保存して終了します。
最後に、tincネットワークスクリプトを実行可能にします。
sudo chmod 755 /etc/tinc/netname/tinc-*
保存して終了します。
次に、各ノードにホスト構成ファイルを配布する必要があります。
キーを配布する
たまたま構成管理システムを使用している場合は、こちらが適切なアプリケーションです。 少なくとも、別のノードと直接通信したい各ノードは、ホスト構成ファイル内にある公開鍵を交換している必要があります。 たとえば、この場合、externalnycのみが他のノードと公開鍵を交換する必要があります。 各公開鍵をノードのすべてのメンバーにコピーするだけで管理が容易になります。 internalnycにコピーするときに、externalnycのホスト構成ファイルの「Address」値をプライベートIPアドレスに変更して、プライベートネットワーク経由で接続が確立されるようにする必要があることに注意してください。
VPNは「netname」と呼ばれるため、ホスト構成ファイルの場所は次のとおりです。/etc/tinc/netname/hosts
externalnycとinternalnyc間のキーの交換
internalnycで、そのホスト構成ファイルをexternalnycにコピーします。
scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp
次に、externalnycで、internalnycのファイルを適切な場所にコピーします。
cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .
次に、externalnycで、ホスト構成ファイルをinternalnycにコピーします。
scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp
internalnycで、externalnycのファイルを適切な場所にコピーします。
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .
internalnycで、externalnycのホスト構成ファイルを編集して、[アドレス]フィールドがexternalnycのプライベートIPアドレスに設定されるようにします(したがって、internalnycはプライベートネットワーク経由でVPNに接続します)。 externalnycのホスト構成ファイルを編集します。
sudo vi /etc/tinc/netname/hosts/externalnyc
「アドレス」の値をexternalnycのプライベートIPアドレスに変更します。
Address = externalnyc_private_IP
保存して終了します。 それでは、残りのノードams1に進みましょう。
externalnycとams1間のキーの交換
ams1で、そのホスト構成ファイルをexternalnycにコピーします。
scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp
次に、externalnycで、ams1のファイルを適切な場所にコピーします。
cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .
次に、externalnycで、ホスト構成ファイルをams1にコピーします。
scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp
ams1で、externalnycのファイルを適切な場所にコピーします。
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .
追加のノード間でキーを交換する
大規模なVPNを作成している場合は、これらの他のノード間でキーを交換する良い機会です。 2つのノードが(転送サーバーを介さずに)直接通信するようにするには、キー/ホスト構成ファイルを交換する必要があり、互いの実際のネットワークインターフェースにアクセスできる必要があることに注意してください。 また、各ホスト構成をVPN内のすべてのノードにコピーするだけでも問題ありません。
構成をテストする
externalnycで始まるeachノードで、次のようにデバッグモードでTincを起動します(netnameはVPNの名前です)。
sudo tincd -n netname -D -d3
各ノードでデーモンを起動すると、各ノードがexternalnycに接続するときに、各ノードの名前を含む出力が表示されます。 次に、VPNを介した接続をテストします。
別のウィンドウのams1で、internalnycのVPN IPアドレス(以前に10.0.0.2に割り当てたもの)にpingを実行します。
ping 10.0.0.2
pingは正常に動作し、VPN上の接続に関するデバッグ出力が他のウィンドウに表示されるはずです。 これは、ams1がexternalnycからinternalnycを介してVPN経由で通信できることを示しています。 CTRL-Cを押して、pingを終了します。
VPNインターフェイスを使用して、アプリケーション接続、ファイルのコピー、SSHなどの他のネットワーク通信を行うこともできます。
各Tincデーモンデバッグウィンドウで、CTRL-を押してデーモンを終了します。
Note:接続が機能していない場合は、ファイアウォールが接続または転送をブロックしていないことを確認してください。
Tincを起動時に起動するように構成する
Tinc initスクリプトが正しく機能する前に、VPNの名前をnets.boot
構成ファイルに入力する必要があります。
each nodeで、nets.bootを編集します。
sudo vi /etc/tinc/nets.boot
VPNの名前をこのファイルに追加します。 私たちのものは「ネット名」です。
# This file contains all names of the networks to be started on system startup.
netname
保存して終了します。 これで、Tincは起動時に起動するように構成され、service
コマンドを使用して制御できます。 開始する場合は、各ノードで次のコマンドを実行します。
sudo service tinc start
おめでとうございます。 Tinc VPNがセットアップされました。
結論
このチュートリアルを完了したので、ニーズに合わせてVPNを構築するための優れた基盤が必要です。 Tincは非常に柔軟であり、どのノードも他のノード(ネットワーク経由でアクセスできる)に接続するように構成できるため、単一のノードに依存せずにメッシュVPNとして機能できます。
がんばろう!