tinc は Windows 10 でも使えるので、Window 10 -> CentOS 7 な VPN を試してみました。Window 側の作業は基本的に管理者として実行された cmd.exe で行っています。
サーバの設定
前回作業した CentOS 7 -> CentOS 7 な VPN のサーバ設定は基本的にそのままです。
Windows の設定
tinc は Chocolatey でサクッと入れられます。
choco install tinc
C:\Program Files (x86)\tinc\my_vpn
の中に以下のファイルを作成します。基本的に CentOS 7 でやったときと大差ないですが tinc.conf
では Device
ではなく Interface
で、後で作成する仮想デバイスの名前を指定します。なぜか Device
の場合はデバイスの CLSID を指定する必要がありました。
tinc.conf
Name = laptop Interface = tinc ConnectTo = server
hosts/server
サーバの /etc/tinc/my_vpn/hosts/server
を貼り付けます。
hosts/laptop
Subnet = 192.168.255.3/32
次に、認証用の RSA 鍵を作成するために C:\Program Files (x86)\tinc
で以下を実行します。
cd "C:\Program Files (x86)\tinc" tincd -n my_vpn -K4096
C:\Program Files (x86)\tinc\my_vpn\hosts/laptop
に公開鍵が追記されているので、サーバにコピーします。
type "my_vpn\hosts\laptop"
Windows で仮想アダプタを準備
Linux の TUN デバイスに代わる仮想アダプタが必要です。
C:\Program Files (x86)\tinc\tap-win64\addtap.bat
を実行します。
cd "C:\Program Files (x86)\tinc\tap-win64" addtap.bat
新たに作成されたインタフェースの名前とアドレスを設定します。
netsh interface ipv4 show interfaces netsh interface set interface name = "イーサネット 5" newname = "tinc" netsh interface ip set address "tinc" static 192.168.255.3 255.255.255.0
VPN の開始
サーバで tinc を開始します。
systemctl start tinc@my_vpn.service systemctl status tinc@my_vpn.service systemctl enable tinc@my_vpn.service
Windows で tincd をフォアグラウンドでお試し実行します。
cd "C:\Program Files (x86)\tinc" tincd -n my_vpn -D -d3
問題無さそうなら Ctrl+C で止めてサービスとしてインストールして開始します。
cd "C:\Program Files (x86)\tinc" tincd -n my_vpn
サービスの停止や開始は次のようにコマンドラインからできます(GUI でもできますが)
sc stop tinc.my_vpn sc start tinc.my_vpn
相互に ping が通れば成功です。
ping -n 192.168.255.1 ping -n 192.168.255.3
サーバで NAT して VPN 経由で外に出る
サーバの設定は CentOS 7 -> CentOS 7 な VPN と特に変わりありません。
/etc/tinc/my_vpn/hosts/server
にSubnet = 0.0.0.0/0
を追記- firewalld を入れて external にして 655 ポートを許可
/etc/tinc/my_vpn/tinc-up
と/etc/tinc/my_vpn/tinc-down
を作る- 以上のことを行ってサービスをリスタートしておく
クライアント側は、まずサーバのホスト設定ファイルで Subnet = 0.0.0.0/0
を追加します。
cd "C:\Program Files (x86)\tinc" notepad.exe "my_vpn\hosts\server"
Address = 203.0.113.100 Subnet = 192.168.255.0/24 Subnet = 0.0.0.0/0 -----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----
サービスを再起動します。
sc stop tinc.my_vpn sc start tinc.my_vpn
ルーティングを設定します。まずはサーバへのルートを現在のデフォルトルートに向けます。前回 CentOS -> CentOS でやったときはこれ忘れてました。サーバとクライアントが同じサブネットだったのでなくても大丈夫でしたけど。普通はそうじゃないので必要です。
203.0.113.100 がサーバのアドレスで、192.168.0.1 クライアントのデフォルトゲートウェイです。適宜読み替えが必要です。
route ADD 203.0.113.100/32 192.168.0.1
次にデフォルトルートを VPN のサーバ側アドレスに変えます。
route CHANGE 0.0.0.0/0 192.168.255.1
サーバで tcpdump とかして VPN 経由でクライアントからのトラフィックが流れているのを確認できれば成功です。
終わったら元に戻しておきます。
route CHANGE 0.0.0.0/0 192.168.0.1 route DELETE 203.0.113.100/32
接続時に自動でルーティング設定
いちおう↑の内容でバッチファイルを作ればサーバと接続したときに自動でルーティング設定とかはできますけど・・・
cd "C:\Program Files (x86)\tinc" notepad.exe "my_vpn\hosts\server-up.bat"
route ADD 203.0.113.100/32 192.168.0.1 route CHANGE 0.0.0.0/0 192.168.255.1
notepad.exe "my_vpn\hosts\server-down.bat"
route CHANGE 0.0.0.0/0 192.168.0.1 route DELETE 203.0.113.100/32
んで、サービスをリスタート。
sc stop tinc.my_vpn sc start tinc.my_vpn
デフォルトゲートウェイをベタ書きにするとラップトップとかで使い物にならないし、かといって Windows の route コマンドとバッチファイルでそのへんい感じにやるのはつらい。
デフォルトゲートウェイは変えずに VPN の先にあるプライベートなサブネットだけ設定するとかならまだ楽なんですけど・・・
route ADD 8.0.0.0/8 192.168.255.1
route DELETE 8.0.0.0/8
Windows からサービスやデバイスを削除
次のようにサービスやデバイスは削除できます。
sc stop tinc.my_vpn sc delete tinc.my_vpn cd "C:\Program Files (x86)\tinc\tap-win64" deltapall.bat