generated at
tinc VPNを試す
闇ネットの拠点間接続用にtincのswitchモードを試してみる
switchモード = L2でつながる
つまり、IPパケットではなく、Ethernetフレームを転送するVPN
tincは、
UDPベースだからNAT越えができる
UDPベースだからTCPベースのVPNみたいに輻輳制御が二重に走ったりしない
OpenVPNほどめんどくさくない
基本的にtincは拠点間VPNなのでサーバ/クライアントの区別がないけど、この記事中では便宜上VPNのセッションを開始する側(NATの内側にいるホスト)をクライアント、VPNのセッションを受け付ける側(NATの外側にいるホスト)をサーバと呼ぶ

サーバ側
さくらVPSにUbuntu 20.04をインストールする
ホスト名を gsngw01 とする
この名前はtincのノード名としても使う
グローバル側IPアドレスは 203.0.113.1/24
VPN側のIPアドレスは 10.0.0.1/8
作成するネットワーク名を gsn とする
以下のコマンドを実行して設定用ディレクトリをつくる
sh
sudo mkdir /etc/tinc/gsn sudo mkdir /etc/tinc/gsn/hosts
以下のファイルを作成する
/etc/tinc/gsn/tinc.conf
Name = gsngw01 Mode = switch Device = /dev/net/tun
/etc/tinc/gsn/tinc-up
#!/bin/sh ip link set $INTERFACE up ip link set dev $INTERFACE master br0 ip addr add 10.0.0.1/8 dev br0
/etc/tinc/gsn/tinc-down
#!/bin/sh ip link set dev $INTERFACE nomaster ip link set $INTERFACE down
以下のコマンドを実行して、鍵ペアを生成する
sh
sudo tincd -n gsn -K
公開鍵が /etc/tinc/gsn/hosts/gsngw01 に書き込まれる
秘密鍵が /etc/tinc/gsn/rsa_key.priv に書き込まれる
/etc/tinc が以下のような感じになってれば設定は完了
sh
$ tree /etc/tinc/ /etc/tinc/ ├── gsn │   ├── hosts │   │   ├── gsngw01 │   │   └── gsngw02 │   ├── rsa_key.priv │   ├── tinc-down │   ├── tinc-up │   └── tinc.conf └── nets.boot 2 directories, 7 files

/etc/tinc/gsn/hosts/gsngw01
-----BEGIN RSA PUBLIC KEY----- MIIBCgKCXXXXXXXXXXXXXXXRptqA/I6gzpvLL8DEG20pJYSMx6xcPunfazBnKb3w ctz5xwJqTMpYzUQwTs0aIVqF/Rf3+yAIs/UPA1ToX3q3Lq588wIeIJ9R2jr9LOpU o7dgDrE3GDdhOXXXXXXXXXXsXlYVfQ1OLQtZFkyAJU5teK++cWmqpL15liZ+JxrI Gkh+NnUVR1DJMh1eEWg/sZMYzIFKZ71BBduhDPo1vYzL83iqwB8LoKDNehd/zzSK mBcxFLb8Bf2ob6c13cyISeFhuWVQMvV0HLDdddHUgBZqhPj9qmUSlXXXXXXXXXXX 2DkrYX2zMIQ+FP0WCT9BdjVA/ZKnX72dtwIDAQAB -----END RSA PUBLIC KEY-----

クライント側
RaspberryPi4にRaspberryPi OSをセットアップする
ホスト名を gsngw02 とする
この名前はtincのノード名としても使う
VPN側のIPアドレスは 10.0.0.1/8
普通のご家庭のNATの内側に設置されている
/etc/tinc/gsn/tinc.conf
Name = gsngw02 Mode = switch Device = /dev/net/tun ConnectTo = gsngw01
/etc/tinc/gsn/tinc-up
#!/bin/sh ip link add br0 type bridge ip link set br0 up ip link set $INTERFACE up ip link set dev $INTERFACE master br0 ip addr add 10.0.0.2/8 dev br0
/etc/tinc/gsn/tinc-down
#!/bin/sh ip link set dev $INTERFACE nomaster ip link set dev $INTERFACE down ip link set dev br0 down ip link del dev br0

sh
sudo systemctl enable tinc@gsn.service