VPN設定 · 1 min read · Dec 21, 2025

Ubuntu 16.04 LTSにTincを使ってVPNをインストールする

仮想プライベートネットワーク(VPN)は、インターネットなどの大規模な公共ネットワーク上で動作する安全なプライベートネットワークです。VPNは、最近数年でますます人気が高まっています。主に、高価で複雑な新しいハードウェアを設定する必要なく、セキュリティとプライバシーを向上させることができるためです。また、ネットワークおよびサポートコストの削減など、他にもいくつかの利点があります。

VPNは、公共ネットワークを通じて暗号化されたトンネルを作成し、これを使用してサーバーと端末間でデータを安全に送信します。これらの接続はさまざまな方法で暗号化でき、多くの異なるVPNクライアントやデーモンが、アーキテクチャ、予算、経験レベルに応じて利用可能です。

Tincはそのようなソリューションの1つです (1)。オープンソースのVPNデーモンであり、現在は幅広いプラットフォームで利用可能で、類似のVPNクライアントに対していくつかの利点があります。安全で信頼性の高い暗号化、オプションの圧縮を提供し、ネットワークが成長するにつれて簡単に拡張できます。自動フルメッシュルーティングにより、VPNトラフィックは常に(可能な限り)目的のマシンに直接送信され、中間転送を経ずに行われるため、データ盗難の可能性を制限することでセキュリティが大幅に向上します (3)。さらに、Tinc VPNはIPレベルのネットワークコードに通常のネットワークデバイスとして表示されるため、Tinc VPNを設定した後は、既存のソフトウェアを適応させる必要がありません。これにより、Tinc VPNは本質的にスケーラブルになります。

Tincの唯一の小さな問題は、設定が少し難しいと感じる人がいることです。もしそれがあなたに当てはまるなら、心配しないでください。今日は、サーバーでTinc VPNを簡単にセットアップする方法を説明します。

前提条件

このチュートリアルを完全に実行するには、少なくとも3台のUbuntu 16.04サーバーと、各マシンのrootアクセスが必要です。これがない場合や、これが何を意味するのかわからない場合は、このチュートリアルはあなたのためのものではありません。最初に、Ubuntuを使用してサーバーを設定する方法を確認してください (2)。

サーバーシステムをゼロから構築する場合は、最初にマシン同士がどのように通信するかを考える必要があります。このチュートリアルでは、ほとんどの人が選ぶと思われる変数名を使用しますが、自分のセットアップに合わせて変数名を調整する必要があるかもしれないことに注意してください。

このチュートリアルに正確に従いたい場合は、最初に同じデータセンターに2つのVPSをセットアップし、次に別のデータセンターに3つ目のVPSを作成する必要があります。私のデータセンターは、2つのVPSを持つNYC2と、3つ目のVPSを持つAMS2と呼ばれています。これらのVPSは次のように呼ばれます:

externalnyc – すべてのVPNノードがこのサーバーに接続するため、ネットワークが正常に機能するためには常に接続されている必要があります。最終的にセットアップに追加のサーバーを追加したい場合は、externalnycと同じ方法で設定する必要があります。

internalnyc – このVPSは、プライベートネットワークインターフェースを使用してexternalnyc VPNノードに接続します。

ams1 – これは私たちの公共VPN接続です。公共インターネットを介してexternalnycに接続します。

目標

私たちが達成したいことは次のとおりです:

私たちのプライベートネットワークは緑の線で表され、3つのサーバーを接続しています。オレンジはプライベートネットワークで、2つのNYC2サーバーを結びつけています。すべてのサーバーはVPNを介して接続できますが、プライベートネットワークはAMS1にはアクセスできません。

これを実現するために、次の手順に従ってください:

Tincをインストール

まず、Tincをインストールする必要があります。いつものように、次のコマンドを実行してすべてのaptリポジトリが最新であることを確認してください:

sudo apt-get update

次に、aptを介して標準的な方法でTincをインストールします:

sudo apt-get install tinc

これで完了です!マシンはTincと必要なすべての前提条件をダウンロードします。次に、設定を見てみましょう。

設定

Tincの設定は、他のVPNとは少し異なる場合があります。これは、VPNを区別するために「netname」を使用します。これは、Tincを介して複数のVPNを実行している場合に非常に便利ですが、最初は少し直感に反するかもしれません。これは私たちの最初のTincネットワークなので、シンプルに保ち、VPNを「netname」と呼びましょう。

次に、各サーバーについてです。各サーバーには、3つの設定コンポーネントが必要です:

  • 設定ファイル:tinc.conf、tinc-up、tinc-down、およびオプションで他のファイル。
  • 公開鍵と秘密鍵のペア:これらは暗号化と認証のためのものです。
  • ホスト設定ファイル:これには公開鍵と他のVPN設定要素が含まれます。

それでは、各サーバーを順番に設定していきましょう。まずはexternalnycからです。

externalnycの設定

さて、具体的な作業に入ります。externalnycで、VPN netnameのための設定ディレクトリ構造を作成します。次のコマンドを実行してください:

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

次に、選択したテキストエディタでtinc.confを開きます:

sudo vi /etc/tinc/netname/tinc.conf

ファイルが表示されたら、ファイルの下部に次の内容を追加します:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

ここで行っているのは、externalnycというノードを設定し、サーバーにネットワークインターフェースがipv4を使用し、「tun0」と呼ばれることを伝えているだけです。ファイルを保存して閉じます。

次に、externalnycのホスト設定ファイルを作成する必要があります。これを行うには、テキストエディタでホスト設定ファイルを開きます:

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

再度、ファイルの下部にいくつかの行を追加し、最初の行にVPSの公開IPアドレスを置き換えます:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

これは、他のサーバーがexternalnycに接続するために使用するファイルです。アドレスは他のノードにこのサーバーに接続する方法と場所を伝え、サブネットアドレスはこのデーモンが動作するサブネットです。再度、このファイルに対する変更を保存して閉じます。

次に、このホストの公開/秘密鍵ペアを生成する必要があります。これは簡単で、次のコマンドを実行します:

sudo tincd -n netname -K4096

これにより、秘密のRSAキーが作成され、先ほど作成した設定ファイルの末尾に公開鍵ペアが追加されます。必要に応じて、再度開いて確認できます。

次に、VPNが開始されたときに実行される小さなスクリプトであるtinc-upを作成する必要があります。次のファイルを編集のために開きます:

sudo vi /etc/tinc/netname/tinc-up

そして、次の内容を追加します:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

VPN netnameが開始されると、このスクリプトが実行されます。これにより、VPNで使用されるネットワークインターフェースが作成され、このVPNではexternalnycのIPが10.0.0.1になります。

しかし、VPNが停止されたときにこのネットワークインターフェースが消えるように、もう1つのスクリプトが必要です。これはtinc-downに追加する必要があります。次のコマンドで開きます:

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

そして、次の内容を追加します:

#!/bin/sh
ifconfig $INTERFACE down

再度、保存して終了します。これでスクリプトができましたが、機能させるためには実行可能としてフラグを立てる必要があります。これは、コマンドラインを使用して簡単に行えます:

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

保存して終了し、このサーバーの設定は完了です。次はinternalnycとams1です。

internalnycとams1の設定

残りの2つのサーバーを設定するには、各マシンで同じコマンドを実行する必要があります。いくつかの小さな違いがありますが、プロセスは基本的に同じです。

上記のexternalnycと同様に、まずは設定ファイルのためのディレクトリ構造を作成する必要があります。各サーバーで次のコマンドを実行し、その後Tinc設定ファイルを編集のために開きます:

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

次に、このファイルの下部にいくつかの行を追加し、「node_name」を各ノードの名前に置き換えます:

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

ただし、上記で異なるアドレスを指定した場合は、ここでも変更してください。これらのファイルを保存して終了します。もう少しです。

前と同様に、ネットワークインターフェース停止スクリプトを作成する必要があります:

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

そして、両方のサーバーにこの行を追加します:

ifconfig $INTERFACE down

最後の設定は、新しいスクリプトを実行可能にすることです:

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

保存して終了します。ふぅ。すべてがうまくいけば、3つのサーバーがすべて設定されました。次は暗号化の実装です。

鍵の配布

すでに構成管理システムを使用している場合は、ラッキーです。理想的な世界では、今作成した各ノードは、公開/秘密鍵インターフェースを使用して他のノードと直接通信できる必要があります。鍵は、上記で見たように、各サーバーのホスト設定ファイルにあります。このシンプルなネットワークでは、実際にはexternalnycだけが他のノードと鍵を交換する必要があります。

したがって、最も簡単な方法は、各公開鍵をさまざまなノードのメンバーにコピーすることです。これは実際には非常に簡単で、コピーする際に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で同じファイルを適切な場所にコピーします:

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

次に、逆の手順を行います。externalnycで、ホスト設定ファイルをinternalnycにコピーします:

scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp

そして、internalnycでファイルを適切な場所にコピーします:

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

次に、internalnycでexternalnycのホスト設定ファイルを編集して、アドレスが正しいことを確認する必要があります。これは、ノードがプライベートネットワークを介してVPNに接続できるようにするためです。internalnycでexternalnycのホスト設定ファイルを開きます:

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

そして、アドレス値をexternalnycのプライベートIPアドレスに変更します。次のようになります:

Address = externalnyc_private_IP

ファイルを保存して終了します。これで、これら2つの鍵は完了です。次に、残りのノードとの鍵を交換する必要があります。

externalnycとams1間の鍵の交換

ここでのプロセスは非常に似ています。ams1を使用して、ホスト設定ファイルをexternalnycにコピーします:

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

次に、externalnycで正しい場所にコピーします:

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

externalnycに留まり、ファイルを反対側のams1にコピーします:

scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp

そして、ams1でこのファイルを適切な場所にコピーします:

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

これで鍵の交換は完了です。理論的には、Tincを介して動作する暗号化されたVPNができました。このチュートリアルに従っていれば、セットアップのテストに進むことができます。ただし、追加のノードを追加する機会を利用した場合は、今が必要なすべての鍵を交換する良いタイミングです。

中央ノードを使用している場合は、すべての鍵をすべてのサーバーにコピーする必要はありません。ただし、ノードが直接互いに通信できるようにするには、鍵を直接交換する必要があります。これを行うプロセスは、上記で説明したのと同じです。必要な接続性を達成するために、必要なだけ繰り返してください。

テスト

これでテストの準備が整いました。これを行うには、Tincをデバッグモードで開始するのが良いアイデアです。これにより、エラーをキャッチし、何か問題が発生した場合にさらに情報を得ることができます。適切に構成されていないVPNは実際にはセキュリティリスクとなる可能性があるため、重要な用途にVPNを使用する前に、すべてが正常に機能することを確認してください。

デバッグモードでTincを開始するには、各ノードで、まずexternalnycから次のコマンドを実行します:

sudo tincd -n netname -D -d3

VPNに別の名前を付けた場合は、もちろん「netname」変数を適切な名前に変更してください。

各ノードでデーモンが起動すると、接続する各ノードの名前を示す出力が返されるはずです。これが発生しない場合は、どこかで間違いを犯しています。

次に、VPNをテストできます。ams1の新しいウィンドウで、IPアドレスを使用してinternalnycにpingを送信します。以前にこれを10.0.0.2に割り当てたので、次のように入力します:

ping 10.0.0.2

幸運にも、pingが成功するはずです。他のウィンドウに、あなたが行った接続を説明するデバッグ出力が表示されるはずです。ams1は、あなたの新しいVPNを介してexternalnycに接続され、internalnycに接続できます。CTRL-Cを押すと、pingが停止します。

これで安全なVPN接続ができたので、他のタイプのネットワーク通信(アプリケーション接続、ファイルのコピー、SSHなど)に使用できます。

pingが成功しなかった場合でも、すべてを正しく行ったと思う場合は、ファイアウォールが干渉している可能性があります。ファイアウォールの設定を確認し、再試行してください。

Tincの起動時設定

最後に1つだけ。これからすべてのネットワーク通信にTinc VPNを使用する場合は、起動時に自動的に起動するように設定することをお勧めします。各ノードで、nets.boot設定ファイルを編集する必要があります。次のコマンドでファイルを開きます:

sudo vi /etc/tinc/nets.boot

次に、このファイルに新しいVPNの名前を追加します。私のように「netname」を選んだ場合、次のようになります:

# このファイルには、システム起動時に開始されるネットワークのすべての名前が含まれています。
netname

保存して終了し、これで完了です。Tincは正常に動作し、起動時に開始されます。お疲れ様でした。

Tincを制御する必要がある場合は、各ノードで「service」コマンドを実行できます。次のコマンドを実行してください:

sudo service tinc start

そして、いろいろ試してみてください。基本的な制御はこのコマンドで実現できます。

結論

これで、すべてのマシンでTincを介して安全なVPN接続が実行されているはずです。このVPNは、さらなるネットワーク機能を構築するための基盤として使用できます。

将来的にさらにノードを追加したり、Tincを他のVPNと組み合わせたりしたい場合、Tincはこれを可能にします。各追加ノードのプロセスは、上記で説明したのと同じであり、変更が必要な変数やアドレスを簡単に確認できるはずです。ノードが直接互いに接続できるようにするには、直接鍵を交換する必要があることを忘れないでください。このように、TincはメッシュVPNとして機能し、私のアプローチよりも少し安全です。それ以外の場合は、私が行ったようにネットワークを設定し、すべてを中央ノードを介して通過させることができます。

いずれにせよ、あなたは今自由に遊ぶことができます。頑張ってください!

リソース

(1) https://www.tinc-vpn.org/

(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。