= vpn / LM: [2024-12-01 02:12:38]
[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 程度まで遅延が増えたのは仕方ないのかもしかたないのかもしれない.
サーバ・クライアント共に,net/wireguard-tools を入れるだけでOK.
% sudo portmaster -D net/wireguard-tools % rehash # PATH をアップデートして,シェルで補完できるようにするため
前提:
wireguard_enable="YES" wireguard_interfaces="wg0"
WireGuard の設定をするには,ユーザ/パスワードではなく,公開鍵・秘密鍵 のペアを WireGuard 専用のコマンドで作成する必要がある.
鍵のペアは,サーバ・クライアントどちらで作成しても良い.
wg コマンドの後ろのキーワードが genkey と pubkey なので気をつける.
% wg genkey server.key # サーバ用秘密鍵 % wg pubkey < server.key > server.pub # サーバ用公開鍵 % wg genkey client.key # クライアント用秘密鍵 % wg pubkey < client.key > client.pub # クライアント用公開鍵
[Interface] セクションに,サーバ側の設定を記載.PrivateKey は,作成したサーバ用秘密鍵を指定.Address には,自分のアドレスである 192.168.100.1,及びそのサブネットマスクを指定する.ListenPort は適当に指定すれば良い. [Peer] は,接続してくるクライアントに関する情報を記載する.複数のクライアントを指定する場合は,[Peer] セクションを複数作成する.AllowedIPs は,接続してくるクライアントのアドレスを記載する.この際,サブネットは気にせず /32 を指定しないと動かなかった./24 と書くべきかと思ったが,エラーが出ていた.
[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
[Interface] セクションに自分のアドレスと,今回のネットワークのサブネットである /24 を記載.PrivateKey は client.key の中身を記載する.[Peer] の PublicKey には,server.pub の中身を記載.この公開鍵と秘密鍵を使って通信の暗号化が行なわれている模様.
AllowedIPs に記載するアドレスには,VPN 経由で通信したいアドレスを記載していく.カンマ区切りで複数書いていくことも可能.AllowedIPs に記載することで,wg0 からデータが送られるよう,ルーティングテーブルが書き変わる.
例えば,今回の設定を行ない,netstat -rn でルーティングテーブルを見ると,以下のようになる.192.168.100.0/24 が wg0 から出るように設定されていることが分かる.
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#3 UH lo0 192.168.100.0/24 link#4 U wg0 192.168.100.2 link#3 UHS lo0 xxx.xxx.xxx.128/28 link#1 U em0 xxx.xxx.xxx.xxx link#3 UHS lo0
Endpoint には,通信先情報を書く.IP:Port の形で記載する.
[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
サーバ → クライアント の順で起動する.
% sudo /usr/local/etc/rc.d/wireguard start
wg コマンドで,接続状況の確認ができる.peer セクションで latest handshake が表示されていなければ,うまく接続できていない.その場合は,鍵の対応が間違っていないか,良く確認すると良いかもしれない.
% 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
通信できているかどうかは,ping 192.168.100.1 などすると良いだろう.
FreeBSD で pptp サーバーを立ち上げるなら,poptop と mpd がメジャーっぽい.
system: command "/usr/sbin/arp" returned 256
mba ホストに接続する.
# sysctl net.inet.ip.forwarding=1
#!/bin/sh # PROVIDE: utvpnserver # REQUIRE: samba # KEYWORD: shutdown . /etc/rc.subr name=utvpnserver rcvar=utvpnserver_enable start_precmd=start_precmd stop_postcmd=stop_postcmd start_precmd() { /usr/bin/utvpnserver start } stop_postcmd() { /usr/bin/utvpnserver stop } load_rc_config ${name} run_rc_command "$1"
このページへのアクセス 今日: 1 / 昨日: 1 総計: 140