![**FreeBSD Home NAS – 第 3章
WireGuard VPN、ルーティング、および Linux クライアントの追加**
---
### 概要
本ガイドでは、FreeBSD 上で WireGuard VPN を構築し、LAN から出るすべてのトラフィックをトンネル経由にするようルーティングを設定し、Linux クライアントをピアとして追加する手順を説明します。
---
## 1. WireGuard のインストール
```sh
pkg install wireguard-tools
```
---
## 2. キーの生成
```sh
wg genkey | tee server_private.key | wg pubkey > server_public.key
```
各 Linux ピアでも同様に実行し、プライベート/パブリックキー対を取得します。
---
## 3. `/etc/rc.conf` の設定
```sh
wireguard_enable="YES"
wireguard_server0_interface="wg0"
wireguard_server0_address="10.0.0.1/24"
wireguard_server0_port="51820"
```
---
## 4. `/usr/local/etc/wireguard/wg0.conf` の作成
```conf
[Interface]
PrivateKey = <server_private_key>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = ipfw add 100 fwd 10.0.0.2 out via enp0s3
PostDown = ipfw delete 100
```
`enp0s3` は LAN インタフェースに置き換えてください。
---
## 5. ピア(Linux マシン)の追加
```conf
[Peer]
PublicKey = <peer_public_key>
AllowedIPs = 10.0.0.2/32
Endpoint = <peer_ip>:51820
PersistentKeepalive = 25
```
`wg0.conf` の `[Peer]` セクションに各ピアを追加します。
---
## 6. IP フォワーディングの有効化
```sh
sysctl -w net.inet.ip.forwarding=1
```
永続化するには:
```sh
echo 'net.inet.ip.forwarding="YES"' >> /etc/sysctl.conf
```
---
## 7. ファイアウォールルールの適用(任意)
```sh
sudo ipfw add 200 fwd 10.0.0.2 in on wg0
```
ネットワーク構成に合わせて調整してください。
---
## 8. WireGuard の起動
```sh
service wireguard start
```
確認は:
```sh
wg show
```
---
## 9. Linux クライアントの設定
各 Linux ピアで `/etc/wireguard/wg0.conf` を作成します。
```conf
[Interface]
PrivateKey = <peer_private_key>
Address = 10.0.0.2/32
[Peer]
PublicKey = <server_public_key>
Endpoint = <freebsd_ip>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
```
クライアントを起動:
```sh
sudo wg-quick up wg0
```
---
## 10. 動作確認
LAN デバイスから VPN ゲートウェイ(`10.0.0.1`)へ ping を実行し、traceroute でトラフィックがトンネル経由になっていることを確認します。
---
### 注意点
- プライベートキーは安全に保管してください。ファイル権限は `chmod 600` を推奨します。
- LAN デバイスからのアクセス制御を行いたい場合は、ファイアウォールルールを調整してください。
- 複数の Linux ピアがある場合は、ステップ 9 を繰り返し、IP を `10.0.0.3`、`10.0.0.4` などに設定してサーバー側の `[Peer]` エントリも更新します。](/_next/image?url=%2Fscreenshots%2F2026-01-05%2F1767565353173.webp&w=3840&q=75)
2026/01/04 20:55
**FreeBSD Home NAS – 第 3章 WireGuard VPN、ルーティング、および Linux クライアントの追加** --- ### 概要 本ガイドでは、FreeBSD 上で WireGuard VPN を構築し、LAN から出るすべてのトラフィックをトンネル経由にするようルーティングを設定し、Linux クライアントをピアとして追加する手順を説明します。 --- ## 1. WireGuard のインストール ```sh pkg install wireguard-tools ``` --- ## 2. キーの生成 ```sh wg genkey | tee server_private.key | wg pubkey > server_public.key ``` 各 Linux ピアでも同様に実行し、プライベート/パブリックキー対を取得します。 --- ## 3. `/etc/rc.conf` の設定 ```sh wireguard_enable="YES" wireguard_server0_interface="wg0" wireguard_server0_address="10.0.0.1/24" wireguard_server0_port="51820" ``` --- ## 4. `/usr/local/etc/wireguard/wg0.conf` の作成 ```conf [Interface] PrivateKey = <server_private_key> Address = 10.0.0.1/24 ListenPort = 51820 PostUp = ipfw add 100 fwd 10.0.0.2 out via enp0s3 PostDown = ipfw delete 100 ``` `enp0s3` は LAN インタフェースに置き換えてください。 --- ## 5. ピア(Linux マシン)の追加 ```conf [Peer] PublicKey = <peer_public_key> AllowedIPs = 10.0.0.2/32 Endpoint = <peer_ip>:51820 PersistentKeepalive = 25 ``` `wg0.conf` の `[Peer]` セクションに各ピアを追加します。 --- ## 6. IP フォワーディングの有効化 ```sh sysctl -w net.inet.ip.forwarding=1 ``` 永続化するには: ```sh echo 'net.inet.ip.forwarding="YES"' >> /etc/sysctl.conf ``` --- ## 7. ファイアウォールルールの適用(任意) ```sh sudo ipfw add 200 fwd 10.0.0.2 in on wg0 ``` ネットワーク構成に合わせて調整してください。 --- ## 8. WireGuard の起動 ```sh service wireguard start ``` 確認は: ```sh wg show ``` --- ## 9. Linux クライアントの設定 各 Linux ピアで `/etc/wireguard/wg0.conf` を作成します。 ```conf [Interface] PrivateKey = <peer_private_key> Address = 10.0.0.2/32 [Peer] PublicKey = <server_public_key> Endpoint = <freebsd_ip>:51820 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25 ``` クライアントを起動: ```sh sudo wg-quick up wg0 ``` --- ## 10. 動作確認 LAN デバイスから VPN ゲートウェイ(`10.0.0.1`)へ ping を実行し、traceroute でトラフィックがトンネル経由になっていることを確認します。 --- ### 注意点 - プライベートキーは安全に保管してください。ファイル権限は `chmod 600` を推奨します。 - LAN デバイスからのアクセス制御を行いたい場合は、ファイアウォールルールを調整してください。 - 複数の Linux ピアがある場合は、ステップ 9 を繰り返し、IP を `10.0.0.3`、`10.0.0.4` などに設定してサーバー側の `[Peer]` エントリも更新します。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
FreeBSD 14.3 NAS を軽量 WireGuard VPN サーバとして構成し、リモートオフィスとホームネットワークが単一トンネルで安全に通信できるようにする方法を示すガイドです。WireGuard はコードベースが小さく、カーネル空間で動作し、組み込み暗号化機能とシンプルなピアツーピア設計を備えているため、OpenVPN よりも効率的な代替手段として推奨されます。
セットアップ手順:
- WireGuard ツールのインストール (
)。pkg install wireguard-tools - カーネルモジュールをロード (
) し、kldload if_wg
に/etc/rc.conf
とwireguard_enable=YES
を追加して有効化します。wireguard_interfaces="wg0" - IP フォワーディングを有効化:
。sysrc net.inet.ip.forwarding=1 - pf の設定 でデフォルトは全トラフィックをブロックし、次を許可します:
- オフィス(192.168.0.0/24)とホーム(192.168.100.0/24)の SSH、および VPN クライアントからの接続。
- UDP 51820 上での WireGuard ハンドシェイク。
- VPN クライアントが両 LAN に到達できるようにする。
- VPN およびホームから FreeBSD ホストへの ICMP。
- アウトバウンドトラフィック。
- 鍵を生成 (
) し、権限を設定 (wg genkey | tee server.key | wg pubkey > server.pub
)。chmod 600 server.key
を作成:/usr/local/etc/wireguard/wg0.conf
: プライベートキー、アドレスInterface
、リッスンポート10.8.0.1/24
。51820- 各クライアントの
ブロック(パブリックキー、許可 IP、エンドポイント DDNS:51830)。Peer
- オフィスルーターで NAT ポート転送:UDP 51830 を NAS の 192.168.0.2:51830 に転送。
- クライアント設定(Arch Linux):
をインストールし、鍵を生成、wireguard-tools
にプライベートキー、アドレス/etc/wireguard/wg0.conf
、サーバーのパブリックキーと DDNS エンドポイントへのピアブロックを作成。10.8.0.3/24 - 自動起動を有効化: 両方の FreeBSD と Arch Linux で
。systemctl enable wg-quick@wg0 - 静的ルート追加:
- オフィスノートパソコン: NetworkManager の CLI を使い、192.168.100.0/24 を 192.168.0.2(NAS)経由に設定。
- ホームノートパソコン: VPN インターフェース (
) 経由で 192.168.0.0/24 にルーティング。10.8.0.1
これらの手順を完了すると、オフィスノートパソコン(192.168.0.165)、ホームノートパソコン(192.168.100.205)および NAS(192.168.0.2)のすべてのデバイスが LAN と VPN ネットワーク (
10.8.0.0/24) を介して相互に ping および SSH が可能になります。結果として、オープンソースネットワーキングを NAS やサーバプラットフォームで利用する実用性を示す、安全かつ低負荷なリモートアクセスソリューションが完成します。
Text to translate
(The original text provided in the user message.)
本文
FreeBSD:ホームNAS – 第 3回 ― WireGuard VPN、Linux クライアントとルーティング設定
概要
本記事は、FreeBSD 14.3 を使ったホーム NAS の構築シリーズの続編です。
WireGuard を FreeBSD 上にインストール・設定し、Arch‑Linux クライアントを追加し、以下のような相互接続を実現します。
- オフィス(192.168.0.0/24)とホーム(192.168.100.0/24)のネットワークが互いに通信できる
- 両方のノートパソコンから FreeBSD NAS にアクセス可能
WireGuard と OpenVPN の比較
| 機能 | WireGuard | OpenVPN |
|---|---|---|
| コードサイズ | カーネル内で約 4 k 行 | ユーザー空間で約 100 k 行 |
| 所在地 | カーネルモジュール(パケット処理・暗号化) | ユーザー空間サービス(TCP/UDP ソケット) |
| 暗号化 | カーネル内実装 | OpenSSL / LibreSSL(ユーザー空間) |
| アーキテクチャ | ピアツーピア(サーバ/クライアントの役割なし) | クライアント‑サーバ |
WireGuard は暗号化されたネットワークインタフェースそのものです。
OpenVPN は従来型のアプリケーションベース VPN であり、両者は設計思想が異なります。
ネットワーク構成
オフィス:192.168.0.0/24 → TP‑LINK Archer AX12 • ワークノートパソコン(Arch Linux) • FreeBSD NAS(ホスト + WireGuard) ホーム:192.168.100.0/24 → TP‑LINK Archer AX12 • ホームノートパソコン(Arch Linux)
FreeBSD は WireGuard VPN サーバとして動作します。
ルーターはポート 51820 を FreeBSD ホストへ NAT フォワードします。
FreeBSD に WireGuard をインストール
# pkg install wireguard-tools # ユーザーランドツール # kldload if_wg # カーネルモジュールをロード
/etc/rc.conf で有効化します。
wireguard_enable = YES wireguard_interfaces = wg0
ネットワーク設定と IP フォワーディング
sysrc gateway_enable="YES" # ルーティングを有効化 sysctl net.inet.ip.forwarding=1 # 即時転送を許可
Packet Filter (pf) のルール
基本テンプレート
set skip on lo block log all pass out keep state
受信トラフィック
# オフィス & ホームからの SSH(FreeBSD) pass in log on em0 proto tcp from 192.168.0.0/24 to (em0) port 22 keep state pass in log on em0 proto tcp from 192.168.100.0/24 to (em0) port 22 keep state # VPN クライアントからの SSH pass in on wg0 proto tcp from 10.8.0.0/24 to (wg0) port 22 keep state # WireGuard ハンドシェイク pass in on em0 proto udp to (em0) port 51820 keep state # VPN → LAN アクセス pass in on wg0 from 10.8.0.0/24 to 192.168.0.0/24 keep state pass in on wg0 from 10.8.0.0/24 to 192.168.100.0/24 keep state # ICMP (ping) pass in on wg0 proto icmp from 10.8.0.0/24 to (wg0) keep state pass in on em0 proto icmp from 192.168.0.0/24 to 192.168.100.0/24 keep state
リロード:
pfctl -vnf /etc/pf.conf && service pf reload
WireGuard の設定
キー生成(FreeBSD 上)
cd /usr/local/etc/wireguard wg genkey | tee server.key | wg pubkey > server.pub chmod 600 server.key
/usr/local/etc/wireguard/wg0.conf
/usr/local/etc/wireguard/wg0.conf[Interface] Address = 10.8.0.1/24 ListenPort= 51820 PrivateKey= <server.key の内容> [Peer] # クライアントごとに追加 PublicKey = ... AllowedIPs = 10.8.0.X/32, 192.168.100.0/24
インタフェース起動:
wg-quick up wg0 ifconfig wg0 # IP と状態を確認 wg show # ピアとステータスを表示
動的 DNS と NAT ポート転送(オフィスルーター)
- プロトコル:UDP
- 外部ポート:51830(マスキング用)
- フォワード先:
(FreeBSD ホスト)に 51830192.168.0.2
IP が動的の場合は DDNS を設定します(例:No-IP)。
Arch‑Linux クライアントの構成
pacman -S wireguard-tools cd /etc/wireguard wg genkey | tee client1.key | wg pubkey > client1.pub chmod 600 client1.key
/etc/wireguard/wg0.conf
(クライアント)
/etc/wireguard/wg0.conf[Interface] PrivateKey = <client1.key の内容> Address = 10.8.0.3/24 [Peer] PublicKey = <サーバの公開鍵> Endpoint = setevoy-***.ddns.me:51830 AllowedIPs = 10.8.0.1/32, 192.168.0.0/24 PersistentKeepalive = 25
起動:
wg-quick up wg0
FreeBSD サーバにクライアントをピアとして追加します(
wg0.conf に [Peer] セクションを追記)。
WireGuard を再起動:
wg-quick down wg0 && wg-quick up wg0
クライアントからサーバ、オフィス LAN への
ping・ssh をテストします。
クロスLAN アクセス(オフィス ↔ ホーム)
- オフィスノートパソコン はホームネットワークへルートを追加:
sudo ip route add 192.168.100.0/24 via 192.168.0.2
- ホームノートパソコン はオフィスネットワークと VPN サブネットを知る必要があります:
sudo ip route add 192.168.0.0/24 via 192.168.0.2 sudo ip route add 10.8.0.0/24 via 192.168.0.2
NetworkManager で永続化します(例:nmcli connection modify … +ipv4.routes ...)。
pf の最終設定ファイル(完全版)
set skip on lo block log all # オフィス & ホームからの SSH(FreeBSD) pass in log on em0 proto tcp from 192.168.0.0/24 to (em0) port 22 keep state pass in log on em0 proto tcp from 192.168.100.0/24 to (em0) port 22 keep state # VPN クライアントからの SSH pass in on wg0 proto tcp from 10.8.0.0/24 to (wg0) port 22 keep state # WireGuard ハンドシェイク pass in on em0 proto udp to (em0) port 51820 keep state # VPN → LAN アクセス pass in on wg0 from 10.8.0.0/24 to 192.168.0.0/24 keep state pass in on wg0 from 10.8.0.0/24 to 192.168.100.0/24 keep state # ICMP (ping) pass in on wg0 proto icmp from 10.8.0.0/24 to (wg0) keep state pass in on em0 proto icmp from 192.168.0.0/24 to 192.168.100.0/24 keep state pass out keep state
リロード:
pfctl -vnf /etc/pf.conf && service pf reload
動作確認
-
両端で
を実行し、直近のハンドシェイクが表示されることを確認wg show -
・ping
が以下の間で機能するかテスト:ssh- オフィスノートパソコン ↔ ホームノートパソコン
- ノートパソコン ↔ FreeBSD NAS
- VPN クライアント ↔ LAN 上のホスト
ホーム NAS は WireGuard トンネル経由で両ネットワークから到達可能となり、今回の構成は完了です。