前書き

このチュートリアルでは、オープンソースの仮想プライベートネットワーク(VPN)デーモンであるTincを使用して、サーバーがローカルネットワーク上にあるかのように通信できる安全なVPNを作成する方法について説明します。 また、Tincを使用してプライベートネットワークへの安全なトンネルをセットアップする方法も示します。 Ubuntu 14.04サーバーを使用しますが、構成は他のOSでの使用に適合させることができます。

Tincの便利な機能には、暗号化、オプションの圧縮、自動メッシュルーティング(可能な場合、VPNトラフィックが通信サーバー間で直接ルーティングされる)、簡単な拡張などがあります。 これらの機能は、TincをOpenVPNなどの他のVPNソリューションと区別し、地理的に分散している多くの小規模ネットワークからVPNを作成するための優れたソリューションにします。 Tincは、Linux、Windows、Mac OS Xなどの多くのオペレーティングシステムでサポートされています。

前提条件

このチュートリアルを完了するには、少なくとも3台のUbuntu 14.04サーバーでルートアクセスが必要です。 ルートアクセスをセットアップする手順は、こちら(ステップ3および4)にあります:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntuでの初期サーバーセットアップ14.04]。

独自の環境でこれを使用することを計画している場合は、サーバーが相互にアクセスする方法を計画し、このチュートリアルに示されている例を独自のニーズに合わせて調整する必要があります。 これを独自の設定に適応させる場合は、例で強調表示されている値を独自の値に置き換えてください。

このチュートリアルを正確に実行する場合は、プライベートネットワーキングを使用して同じデータセンターに2つのVPSを作成し、別のデータセンターに別のVPSを作成します。 NYC2データセンターに2つのVPSを作成し、AMS2データセンターに1つのVPSを次の名前で作成します。

  • * externalnyc *:すべてのVPNノードがこのサーバーに接続し、適切なVPN機能のために接続を維持する必要があります。 必要に応じて、追加のサーバーをこのサーバーと同様に構成して、冗長性を提供できます。

  • * internalnyc *:private_ネットワークインターフェイスを使用して_externalnyc VPNノードに接続します

  • * ams1 *:パブリックインターネット経由で_externalnyc_ VPNノードに接続します

私たちの目標

設定するVPNの図を次に示します(前提条件で説明)。

image:https://assets.digitalocean.com/articles/tinc/tinc.png [Tinc VPN Setup]

緑は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を「」と呼びます。

VPNの一部となるすべてのサーバーには、次の3つの構成コンポーネントが必要です。

  • 構成ファイル:tinc.conf、tinc-up、tinc-downなど。

  • 公開/秘密キーペア:暗号化およびノー​​ド認証用

  • ホスト構成ファイル:公開鍵およびその他のVPN構成が含まれています

_externalnyc_ノードを構成することから始めましょう。

externalnycを構成する

  • externalnyc *で、「netname」というVPNの構成ディレクトリ構造を作成します。

sudo mkdir -p /etc/tinc//hosts

編集用にtinc.confを開きます。

sudo vi /etc/tinc//tinc.conf

次の行を追加します。

Name =
AddressFamily = ipv4
Interface = tun0

これは、「tun0」と呼ばれるIPv4を使用するネットワークインターフェイスで、というノードを構成するだけです。 保存して終了します。

次に、externalnyc hosts設定ファイルを作成しましょう:

sudo vi /etc/tinc//hosts/

次の行を追加します(VPSのパブリックIPアドレスをここに置き換えます):

Address =
Subnet = 10.0.0.1/32

最終的に、このファイルは、このサーバーと通信するために他のサーバーで使用されます。 アドレスは他のノードがこのサーバーに接続する方法を指定し、サブネットはこのデーモンがサービスを提供するサブネットを指定します。 保存して終了します。

次のコマンドを使用して、このホストの公開/秘密キーペアを生成します。

sudo tincd -n  -K4096

これにより、秘密鍵(/etc/tinc/netname/rsa_key.priv)が作成され、公開鍵が最近作成した_externalnyc_ hosts構成ファイル(/ etc / tinc / netname / hosts / externalnyc)に追加されます。

ここで、netname VPNが開始されるたびに実行されるスクリプトである `+ tinc-up +`を作成する必要があります。 今すぐ編集用にファイルを開きます。

sudo vi /etc/tinc//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//tinc-down

次の行を追加します。

#!/bin/sh
ifconfig $INTERFACE down

保存して終了します。

最後に、tincネットワークスクリプトを実行可能にします。

sudo chmod 755 /etc/tinc//tinc-*

保存して終了します。

他のノードに進みましょう。

internalnycとams1を構成する

これらの手順は、_internalnyc_と_ams1_の両方で必要になりますが、わずかな違いがあります。

  • internalnyc および ams1 *で、「netname」というVPNの構成ディレクトリ構造を作成し、Tinc構成ファイルを編集します。

sudo mkdir -p /etc/tinc//hosts
sudo vi /etc/tinc//tinc.conf

次の行を追加します(名前をノード名に置き換えます)。

Name =
AddressFamily = ipv4
Interface = tun0
ConnectTo =

これらのノードは、「externalnyc」(この前に作成したノード)への接続を試行するように構成されています。 保存して終了します。

次に、ホスト構成ファイルを作成しましょう。

sudo vi /etc/tinc/netname/hosts/
  • internalnyc *の場合、次の行を追加します。

Subnet = 10.0.0./32
  • ams1 *の場合、次の行を追加します。

Subnet = 10.0.0./32

数字が異なることに注意してください。 保存して終了します。

次に、キーペアを生成します。

sudo tincd -n netname -K4096

そして、ネットワークインターフェイス起動スクリプトを作成します。

sudo vi /etc/tinc/netname/tinc-up
  • internalnyc *の場合、次の行を追加します。

ifconfig $INTERFACE 10.0.0. netmask 255.255.255.0
  • ams1 *の場合、次の行を追加します。

ifconfig $INTERFACE 10.0.0. netmask 255.255.255.0

これらのIPアドレスは、VPNでこれらのノードにアクセスする方法です。 保存して終了します。

次に、ネットワークインターフェイス停止スクリプトを作成します。

sudo vi /etc/tinc/netname/tinc-down

そして、次の行を追加します。

ifconfig $INTERFACE down

保存して終了します。

最後に、tincネットワークスクリプトを実行可能にします。

sudo chmod 755 /etc/tinc//tinc-*

保存して終了します。

次に、各ノードにホスト構成ファイルを配布する必要があります。

キーを配布する

たまたま構成管理システムを使用している場合は、こちらが適切なアプリケーションです。 少なくとも、別のノードと直接通信したい各ノードは、ホスト構成ファイル内にある公開鍵を交換している必要があります。 この例では、たとえば、_externalnyc_のみが他のノードと公開鍵を交換する必要があります。 各公開鍵をノードのすべてのメンバーにコピーするだけで管理が容易になります。 _externalnyc_のホスト構成ファイルの「アドレス」値を_internalnyc_にコピーするときにプライベートIPアドレスに変更して、接続がプライベートネットワークで確立されるようにすることに注意してください。

私たちのVPNは「ネット名」と呼ばれているため、ホスト設定ファイルの場所は次のとおりです: + / etc / tinc // hosts +

externalnycとinternalnyc間のキーの交換

  • internalnyc *で、ホスト構成ファイルを_externalnyc_にコピーします。

scp /etc/tinc/netname/hosts/ @:/tmp

次に、* externalnyc *で、_internalnyc_のファイルを適切な場所にコピーします。

cd /etc/tinc/netname/hosts; sudo cp /tmp/ .

次に、* externalnyc *で、そのホスト構成ファイルを_internalnyc_にコピーします。

scp /etc/tinc/netname/hosts/ @:/tmp
  • internalnyc *で、_externalnyc_のファイルを適切な場所にコピーします。

cd /etc/tinc/netname/hosts; sudo cp /tmp/ .
  • internalnyc *では、_externalnyc_のホスト設定ファイルを編集して、「アドレス」フィールドを_externalnyc_のプライベートIPアドレスに設定します(したがって、internalnycはプライベートネットワーク経由でVPNに接続します)。 _externalnyc_のホスト設定ファイルを編集します。

sudo vi /etc/tinc/netname/hosts/externalnyc

「アドレス」の値を_externalnyc_のプライベートIPアドレスに変更します。

Address =

保存して終了します。 それでは、残りのノードams1に進みましょう。

externalnycとams1間のキーの交換

  • ams1 *で、そのホスト構成ファイルを_externalnyc_にコピーします。

scp /etc/tinc/netname/hosts/ @:/tmp

次に、* externalnyc *で、ams1 ’のファイルを適切な場所にコピーします。

cd /etc/tinc/netname/hosts; sudo cp /tmp/ .

次に、* externalnyc *で、そのホスト構成ファイルを_ams1_にコピーします。

scp /etc/tinc/netname/hosts/ @ams1_public_IP:/tmp
  • ams1 *で、_externalnyc_のファイルを適切な場所にコピーします。

cd /etc/tinc/netname/hosts; sudo cp /tmp/ .

追加のノード間でキーを交換する

大規模なVPNを作成している場合は、これらの他のノード間でキーを交換する良い機会です。 2つのノードが(転送サーバーを介さずに)直接通信するようにするには、キー/ホスト構成ファイルを交換する必要があり、互いの実際のネットワークインターフェースにアクセスできる必要があることに注意してください。 また、各ホスト構成をVPN内のすべてのノードにコピーするだけでも問題ありません。

構成をテストする

_externalnyc_で始まる各ノードで、次のようにデバッグモードでTincを開始します(netnameはVPNの名前です):

sudo tincd -n  -D -d3

各ノードでデーモンを起動すると、各ノードがexternalnycに接続するときに、各ノードの名前を含む出力が表示されます。 次に、VPNを介した接続をテストします。

別のウィンドウの* ams1 *で、internalnycのVPN IPアドレス(以前に10.0.0.2に割り当てた)をpingします:

ping

pingは正常に動作し、VPN上の接続に関するデバッグ出力が他のウィンドウに表示されるはずです。 これは、ams1がexternalnycからinternalnycへのVPNを介して通信できることを示しています。 CTRL-Cを押して、pingを終了します。

VPNインターフェイスを使用して、アプリケーション接続、ファイルのコピー、SSHなどの他のネットワーク通信を行うこともできます。

各Tincデーモンデバッグウィンドウで、CTRL-を押してデーモンを終了します。

:接続が機能しない場合は、ファイアウォールが接続をブロックまたは転送していないことを確認してください。

Tincを起動時に起動するように構成する

Tinc initスクリプトが適切に機能する前に、VPNの名前を `+ nets.boot +`設定ファイルに入れる必要があります。

*各ノード*で、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として機能できます。

がんばろう!