Tinc VPNで作る簡易的なVirtual Private Network 3/5 (構築編(2) 子ノードの構築 - Windows編)

# 概要
『Tinc VPNで作る簡易的なVirtual Private Network』の分割記事  
3/5 構築編(4) 子ノードの構築 Windows編

## 各記事
* [Tinc VPNで作る簡易的なVirtual Private Network 1/5 (概要編)](https://qiita.com/libraplanet/items/c94e91ae9360a4893e73)
* [Tinc VPNで作る簡易的なVirtual Private Network 2/5 (構築編(1) ルートノードの構築 - Linux編)](https://qiita.com/libraplanet/items/98b392f52785af4c04fa)
* [Tinc VPNで作る簡易的なVirtual Private Network 3/5 (構築編(2) 子ノードの構築 - Windows編)](https://qiita.com/libraplanet/items/1c0e1678844154c8de45)
* [Tinc VPNで作る簡易的なVirtual Private Network 4/5 (構築編(3) 子ノードの構築 - Linux編)](https://qiita.com/libraplanet/items/01149f3a3ab2315d0221)
* [Tinc VPNで作る簡易的なVirtual Private Network 5/5 (構築編(4) 子ノードの構築 - Android編)](https://qiita.com/libraplanet/items/173c54a9cfcabd7b53ee)

# 構築
## 構築(0)トポロジー (共通記載)
以下のトポロジーで記載を行う。

* ネットワーク名 - myvpn #設定ファイル群を置くフォルダ名になる
* VPNのIPセグメント - 192.168.15.0/24

|Node|Name|OS|Architecture|Mode|Global&nbsp;IP<br />port<br />Domain|VPN&nbsp;IP|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|root |server|CentOS&nbsp;7  |x68_64                          |router|available<br />10655<br/>mydomain.org|192.168.15.1|
|child|client1|Windows&nbsp;10|x64                            |router|                          |192.168.15.2|
|child|client2|CentOS&nbsp;7  |armv7<br />(Raspberry&nbsp;Pi3)|router|                          |192.168.15.3|
|child|client3|Android        |arm                            |router|                          |192.168.15.4|

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/b2803e83-fe73-73c3-72e1-ae26c0e54a86.png" max-width=100%>

## 構築(1) ルートノードの構築 - Linux
⇒ [Tinc VPNで作る簡易的なVirtual Private Network 2/5 (構築編(1) ルートノードの構築 - Linux編)](https://qiita.com/libraplanet/items/98b392f52785af4c04fa)


## 構築(2) 子ノードの構築 - Windows ★本稿

* Windowsはほぼ公式のインストール例どおり<br />[Tinc VPN - Example - installing tinc on Windows 2000/XP/7/8](https://www.tinc-vpn.org/examples/windows-install/)

### 手順(0) ファイル構成
```
[C:\Program Files (x86)\tinc\]
  ├ [tinc]
  │   └ [myvpn]
  │       ├ [hosts]
  │       │   ├ server
  │       │   └ client1
  │       ├ rsa_key.priv
  │       └ tinc.conf
```

### 手順(1) TincVPNのインストール
* ダウンロード ページからインストーラーをダウンロードしてインストールする。
* Tinc VPN - download <br />https://www.tinc-vpn.org/download/

### 手順(2) tinc.conf作成
* フォルダ作成：C:\Program Files (x86)\tinc\myvpn
* ファイル作成：C:\Program Files (x86)\tinc\myvpn\tinc.conf

```conf:tinc.conf
#tinc.conf
Name = client1
# 利用するNIC名称
# (この後インストールするTAPドライバでの仮想NICにつける名前を設定する)
Interface = MyvpnNic
# 接続先
ConnectTo = server
AutoConnect = yes
Mode = router
```

### 手順(3) 自身のホストファイルを作成
hostsフォルダ内に、
tinc.confのNameで指定した名前と同じ名前でファイルを作成する。
* フォルダ作成：C:\Program Files (x86)\tinc\myvpn\hosts
* ファイル作成：C:\Program Files (x86)\tinc\myvpn\hosts\client1

```conf:client1
Subnet = 192.168.15.2/32
Port = 0
```

### 手順(4) キーの作成
```shell
tincd -n myvpn -K4096
```

* 秘密鍵が生成されているのを確認する。
  * ファイル：C:\Program Files (x86)\tinc\myvpn\rsa_key.priv
* 公開鍵が追記された自身のホスト ファイルは後で他のノードに配布する。
  * ファイル：C:\Program Files (x86)\tinc\myvpn\hosts\client1

### 手順(5) ホスト情報の交換
serverとclient1、それぞれのhostsに入っている自身の情報をお互いに交換する。

* `/etc/tinc/myvpn/hosts/server` => `C:\Program Files (x86)\tinc\myvpn\hosts\server`  
  (client1にとって接続先情報)
* `C:\Program Files (x86)\tinc\myvpn\hosts\client1` => `/etc/tinc/myvpn/hosts/client1`  
  (Serverにとっては接続元情報)

※サーバーの接続先情報を持っていても、サーバーに公開鍵が登録されていないと接続は拒否される。

### 手順(6) TAPドライバのインストール
* Tincと一緒に、TAP-Win32のインストーラーがインストールされている。
  * C:\Program Files (x86)\tinc\tap-win32
  * C:\Program Files (x86)\tinc\tap-win64
* 『addtap.bat』を実行してインストール(追加)を行う。
  ※インストールをするのは64bit版で特に問題ない

### 手順(7) 仮想NICの設定
* 『コントロール パネル\ネットワークとインターネット\ネットワーク接続』 を開く
* 手順(5)でインストールしたNICの名称を変更する
  * MyvpnNic
* 仮想NICのプロパティを開き、VPN上でのIPの設定を行う
  * IPアドレス      ：192.168.15.2
  * サブネット マスク：255.255.255.0
  * ほかはブランクでOK
* 詳細設定を開きメトリック値を設定する
  * 自動メトリック　　　　　 ：チェックを外す
  * インターネット メトリック：5000

※ VPN側の仮想NICのメトリック値を重くすることで、物理ネットワークを優先しやすくする。

![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/f8da9f7d-2907-3154-5928-75462cb1dca7.png)


### 手順(8) 起動テスト
```shell
tincd.exe -n myvpn -d3 -D
```

### 手順(9) サービス作成・登録・実行
```shell
# サービスにインストール
tinc.exe -n myvpn

# 起動
net start tinc.myvpn

# 停止
net stop tinc.myvpn
```

※ 自動起動状態など詳細はservice.mscで確認する。

## 構築(3) 子ノードの構築 - Linux]
⇒ [Tinc VPNで作る簡易的なVirtual Private Network 4/5 (構築編(3) 子ノードの構築 - Linux編)](https://qiita.com/libraplanet/items/01149f3a3ab2315d0221)

## 構築(4) 子ノードの構築 - Android
⇒ [Tinc VPNで作る簡易的なVirtual Private Network 5/5 (構築編(4) 子ノードの構築 - Android編)](https://qiita.com/libraplanet/items/173c54a9cfcabd7b53ee)

# 謝辞
* TincVPN (official)  
  https://www.tinc-vpn.org/
* Tinc 1.0 documentation  
  https://www.tinc-vpn.org/documentation/
* Tinc 1.0 documentation - tincd(8)  
  https://www.tinc-vpn.org/documentation/tincd.8
* Tinc 1.0 documentation - tinc.conf(5)  
  https://www.tinc-vpn.org/documentation/tinc.conf.5
* TincApp (android client)  
  https://tincapp.pacien.org/
* Tinc - ArchWiki  
  https://wiki.archlinux.org/index.php/Tinc
* How to automatically start tinc on Fedora 17 | John's 'blog'  
  https://leesjohn.wordpress.com/2013/03/13/how-to-automatically-start-tinc-on-fedora-17/