差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
vpn [2024/11/29 17:35] skkvpn [2024/12/01 02:14] (現在) skk
行 1: 行 1:
-[[vpn]] / LM: [2024-11-29 17:35:35]+[[vpn]] / LM: [2024-12-01 02:12:38]
 ~~NOCACHE~~ ~~NOCACHE~~
 ---- ----
  
-====== wireguard  ====== +====== wireguard  [2024-12-01] ====== 
-===== 概要 ====== +===== 概要 ====== 
-[2024-11-29] の時点で,L3 VPN で問題なければ,WireGuard がメジャーな模様.FreeBSD 12 か 13 くらいから,本体の src tree にもマージされてた模様.+[2024-11-29] の時点で,L3 VPN で問題なければ,WireGuard がメジャーな模様.OpenVPN や softether などと比べても設定はとても簡単に感じる.FreeBSD 12 か 13 くらいから,本体の src tree にもマージされてた模様. 
 + 
 +ただし,L3 VPN しかできないので,VPN 経由で外部インターネットに接続したい場合は,NAT など自分で設定しなければならない.FreeBSD での NAT 設定については,TBA 参照. 
 + 
 +また,今回僕の環境では問題にならなかったが,UDP で通信を行なっているようなので,UDP の通信に問題があるようなら,接続ネットワークの設定を確認する必要があるかもしれない
  
 使ってみたところ,そこそこの速度で使えてるような気がする.計測はしてない. 使ってみたところ,そこそこの速度で使えてるような気がする.計測はしてない.
 5ms 程度の遅延のサーバ上に WireGuard サーバをたてたところ,20ms 程度まで遅延が増えたのは仕方ないのかもしかたないのかもしれない. 5ms 程度の遅延のサーバ上に WireGuard サーバをたてたところ,20ms 程度まで遅延が増えたのは仕方ないのかもしかたないのかもしれない.
  
-===== インストール =====+===== インストール =====
 サーバ・クライアント共に,net/wireguard-tools を入れるだけでOK. サーバ・クライアント共に,net/wireguard-tools を入れるだけでOK.
 +<code bash>
 % sudo portmaster -D net/wireguard-tools % sudo portmaster -D net/wireguard-tools
 +% rehash # PATH をアップデートして,シェルで補完できるようにするため
 +</code>
  
-===== 設定 ====== +===== 設定 ====== 
  
 前提: 前提:
-  * コマは wg+  * WireGuard イタフェース名:wg0 
 +  * サーバの外部インターネットインタフェース名:vtun0  
 +  * WireGuard の内部ネットワークは 192.168.100.0/24
  
-1. rc.conf に記述追加+==== - rc.conf に記述追加 ==== 
 <code> <code>
 wireguard_enable="YES" wireguard_enable="YES"
行 26: 行 34:
 </code> </code>
  
-2. 設定ファイル +==== - 設定 ==== 
-2.1 サーバ側+=== - 鍵の作成 === 
 +WireGuard の設定をするには,ユーザ/パスワードではなく,公開鍵・秘密鍵 のペアを WireGuard 専用のコマンドで作成する必要がある. 
 + 
 +鍵のペアは,サーバ・クライアントどちらで作成しても良い. 
 + 
 +wg コマンドの後ろのキーワードが **genkey** と **pubkey** なので気をつける. 
 + 
 +<code bash> 
 +% wg genkey server.key                # サーバ用秘密鍵 
 +% wg pubkey < server.key > server.pub # サーバ用公開鍵 
 +% wg genkey client.key                # クライアント用秘密鍵 
 +% wg pubkey < client.key > client.pub # クライアント用公開鍵 
 +</code> 
 + 
 +=== - サーバ側 === 
 +[Interface] セクションに,サーバ側の設定を記載.PrivateKey は,作成したサーバ用秘密鍵を指定.Address には,自分のアドレスである 192.168.100.1,及びそのサブネットマスクを指定する.ListenPort は適当に指定すれば良い. 
 +[Peer] は,接続してくるクライアントに関する情報を記載する.複数のクライアントを指定する場合は,[Peer] セクションを複数作成する.AllowedIPs は,接続してくるクライアントのアドレスを記載する.この際,サブネットは気にせず /32 を指定しないと動かなかった./24 と書くべきかと思ったが,エラーが出ていた. 
 + 
 +  * ファイル設置場所:/usr/local/etc/wireguard/wg0.conf 
 + 
 +<code> 
 +[Interface] 
 +PrivateKey = <server.keyの中身> # サーバ用プライベートキーの中身を記載 
 +# VPN インターフェースに割り当てる IP アドレス 
 +Address = 192.168.100.1/24 
 +サーバーでリスンする UDP ポート 
 +ListenPort = 51820 
 + 
 +[Peer] 
 +# Client A  
 +PublicKey = <client.pubの中身> # クライアント用パブリックキーの中身を記載 
 +# 接続を許可するクライアントの VPN の IP アドレス 
 +# サブネット単位でも指定可 ⇒ [172.16.100.0/24] 
 +AllowedIPs = 192.168.100.2/32 
 + 
 +[Peer] 
 +# Client B  
 +PublicKey = <別のclient.pubの中身> # クライアント用パブリックキーを指定 
 +# 接続を許可するクライアントの VPN の IP アドレス 
 +AllowedIPs = 192.168.100.3/32 
 +</code>  
 + 
 +=== - クライアント側 === 
 +[Interface] セクションに自分のアドレスと,今回のネットワークのサブネットである /24 を記載.PrivateKey は client.key の中身を記載する.[Peer] の PublicKey には,server.pub の中身を記載.この公開鍵と秘密鍵を使って通信の暗号化が行なわれている模様. 
 + 
 +AllowedIPs に記載するアドレスには,VPN 経由で通信したいアドレスを記載していく.カンマ区切りで複数書いていくことも可能.AllowedIPs に記載することで,wg0 からデータが送られるよう,ルーティングテーブルが書き変わる. 
 + 
 +例えば,今回の設定を行ない,netstat -rn でルーティングテーブルを見ると,以下のようになる.192.168.100.0/24 が wg0 から出るように設定されていることが分かる. 
 + 
 +<code> 
 +1:37 [0] skk% netstat -rn 
 +Routing tables 
 + 
 +Internet: 
 +Destination        Gateway            Flags     Netif Expire 
 +default            xxx.xxx.xxx.xxx    UGS         em0 
 +127.0.0.1          link#            UH          lo0 
 +192.168.100.0/24   link#                      wg0 
 +192.168.100.2      link#            UHS         lo0 
 +xxx.xxx.xxx.128/28 link#                      em0 
 +xxx.xxx.xxx.xxx    link#            UHS         lo0 
 +</code> 
 + 
 +Endpoint には,通信先情報を書く.IP:Port の形で記載する. 
 + 
 +  * ファイル設置場所:/usr/local/etc/wireguard/wg0.conf 
 + 
 +<code> 
 +[Interface] 
 +Address = 192.168.100.2/24 
 +PrivateKey = <client.keyの中身>  
 + 
 +[Peer] 
 +PublicKey = <server.pubの中身> 
 +AllowedIPs = 192.168.100.0/24 
 +Endpoint = yyy.yyy.yyy.yyy:51820 
 +</code> 
 + 
 +=== - 起動及び確認 === 
 + 
 +サーバ → クライアント の順で起動する. 
 + 
 +<code bash> 
 +% sudo /usr/local/etc/rc.d/wireguard start  
 +</code> 
 + 
 +wg コマンドで,接続状況の確認ができる.peer セクションで latest handshake が表示されていなければ,うまく接続できていない.その場合は,鍵の対応が間違っていないか,良く確認すると良いかもしれない. 
 + 
 +<code bash> 
 +% w 
 +interface: wg0 
 +  public key: <client.pubの中身> 
 +  listening port: 50863 
 + 
 +peer: <server.pubの中身> 
 +  endpoint: yyy.yyy.yyy.yyy:51820 
 +  allowed ips: 192.168.100.0/24 
 +  latest handshake: 1 minute, 27 seconds ago 
 +  transfer: 7.39 GiB received, 361.80 MiB sent 
 +</code>
  
-2.2 クライアント側+通信できているかどうかは,ping 192.168.100.1 などすると良いだろう.
  
 +===== 参考 =====
 +  * https://webprog.spg-games.net/2021-03-31/freebsd%E3%81%ABwireguard%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6vpn%E6%8E%A5%E7%B6%9A/
  
  
vpn.1732869338.txt.gz · 最終更新: 2024/11/29 17:35 by skk
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0