序章

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

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

注: TincメッシュVPNをすばやく簡単にセットアップする場合は、次のチュートリアルを確認してください:AnsibleおよびTincVPNを使用してサーバーインフラストラクチャを保護する方法

前提条件

このチュートリアルを完了するには、少なくとも3台のUbuntu14.04サーバーでルートアクセスが必要です。 ルートアクセスを設定する手順は、ここにあります(手順3および4): Ubuntu14.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構成

Tincは「ネット名」を使用して1つのTincVPNを別のVPNと区別します(複数のVPNの場合)。1つのVPNの構成のみを計画している場合でも、ネット名を使用することをお勧めします。 わかりやすくするために、VPNを「netname」と呼びます。

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

  • 構成ファイル:tinc.conf、tinc-up、tinc-downなど
  • 公開鍵と秘密鍵のペア:暗号化とノード認証用
  • ホスト構成ファイル:公開鍵およびその他の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 )。

今、私たちは作成する必要があります tinc-up netnameVPNが開始されるたびに実行されるスクリプト。 今すぐ編集するためにファイルを開きます。

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を構成します

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

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のみが他のノードと公開鍵を交換する必要があります。 各公開鍵をノードのすべてのメンバーにコピーするだけで、管理が容易になります。 externalnycのホスト構成ファイルの「Address」値をinternalnyc にコピーするときに、プライベートIPアドレスに変更して、接続が確立されるようにする必要があることに注意してください。プライベートネットワーク。

VPNは「ネット名」と呼ばれるため、ホスト構成ファイルの場所は次のとおりです。 /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 のホスト構成ファイルを編集して、「Address」フィールドが 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内のすべてのノードにコピーするだけでも問題ありません。

構成をテストする

each ノードで、 externalnyc で始まり、次のようにデバッグモードで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がVPNを介してexternalnycを介してinternalnycと通信できることを示しています。 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

おめでとうございます! TincVPNがセットアップされました。

結論

このチュートリアルを終えたので、ニーズを満たすためにVPNを構築するための優れた基盤ができているはずです。 Tincは非常に柔軟性があり、任意のノードを他のノード(ネットワーク経由でアクセスできる)に接続するように構成できるため、単一のノードに依存することなく、メッシュVPNとして機能できます。

幸運を!