目次

= vpn / LM: [2024-12-01 02:12:38]


1. wireguard [2024-12-01]

1.1 概要

[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 程度まで遅延が増えたのは仕方ないのかもしかたないのかもしれない.

1.2 インストール

サーバ・クライアント共に,net/wireguard-tools を入れるだけでOK.

% sudo portmaster -D net/wireguard-tools
% rehash # PATH をアップデートして,シェルで補完できるようにするため

1.3 設定

前提:

1.3.1 rc.conf に記述追加

wireguard_enable="YES"
wireguard_interfaces="wg0"

1.3.2 設定

1.3.2.1 鍵の作成

WireGuard の設定をするには,ユーザ/パスワードではなく,公開鍵・秘密鍵 のペアを WireGuard 専用のコマンドで作成する必要がある.

鍵のペアは,サーバ・クライアントどちらで作成しても良い.

wg コマンドの後ろのキーワードが genkeypubkey なので気をつける.

% wg genkey server.key                # サーバ用秘密鍵
% wg pubkey < server.key > server.pub # サーバ用公開鍵
% wg genkey client.key                # クライアント用秘密鍵
% wg pubkey < client.key > client.pub # クライアント用公開鍵

1.3.2.2 サーバ側

[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

1.3.2.3 クライアント側

[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

1.3.2.4 起動及び確認

サーバ → クライアント の順で起動する.

% 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 などすると良いだろう.

参考

pptp

FreeBSD で pptp サーバーを立ち上げるなら,poptop と mpd がメジャーっぽい.

poptop

mpd

FreeBSD 8.0Release 近辺での mpd5

system: command "/usr/sbin/arp" returned 256

参考

OpenVPN

ut-vpn

環境

mba ホストに接続する.

virtualbox での設定の注意

インストール方法

設定

FreeBSD 側での設定

# 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