カテゴリー
Debian LinuxでもWireGuardで自宅VPNネットワークを構築するやり方
※ 当ページには【広告/PR】を含む場合があります。
2022/03/02
WireGuardサーバーをDebianOS上に構築する
#👇基本OS情報
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
#👇Debianのマイナーバージョン情報
$ cat /etc/debian_version
11.2
#👇Linuxカーネルの情報
$ uname -srv
Linux 5.10.0-10-amd64 #1 SMP Debian 5.10.84-1 (2021-12-08)
$ sudo apt update
$ sudo apt install wireguard
$ wg --version
wireguard-tools v1.0.20210223 - https://git.zx2c4.com/wireguard-tools/
WireGuardのクレデンシャルの設定
+ wgserver.key サーバ用秘密鍵
+ wgserver.pub サーバ用公開鍵
+ wgclient.key クライアント用秘密鍵
+ wgclient.pub クライアント用公開鍵
$ su
#👇以降ではルートユーザーで操作
># cd /etc/wireguard
#👇サーバー用のキーを生成
># wg genkey > wgserver.key
># wg pubkey < wgserver.key > wgserver.pub
#クライアント用のキーを生成
># wg genkey > wgclient.key
># wg pubkey < wgclient.key > wgclient.pub
#👇ルートユーザー以外の秘密鍵のファイル操作権限を制限
># chmod 600 wgserver.key
># chmod 600 wgclient.key
#suから抜ける
$ sudo ls -la /etc/wireguard/
-rw------- 1 root root 45 2月 28 11:58 wgclient.key
-rw-r--r-- 1 root root 45 2月 28 11:58 wgclient.pub
-rw------- 1 root root 45 2月 28 11:56 wgserver.key
-rw-r--r-- 1 root root 45 2月 28 11:57 wgserver.pub
tee
/etc/wireguard/
$ wg genkey | sudo tee /etc/wireguard/wgclient.key
$ sudo cat /etc/wireguard/wgclient.key | wg pubkey | sudo tee /etc/wireguard/wgclient.pub
$ sudo chmod 600 /etc/wireguard/wgclient.key /etc/wireguard/wgclient.pub
【サーバー側】WireGuardのconfファイルを設定する
/etc/wireguard/
wg0.conf
10.0.17.1
10.0.17.2
[Interface]
Address = 10.0.17.1/32
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(※wgserver.keyの中身)
MTU = 1420
ListenPort = 51820
[Peer]
PublicKey = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy(※wgclient.pubの中身)
AllowedIPs = 10.0.17.2/32
[Interface]: 自分側の設定
Address: WireGuardで使用するIPアドレスを指定
MTU: 接続時のMTU値。
デフォルトでは1420が設定される。
環境によってはネットワークが不安定動作 (切断を繰り返す等)
する場合、1400や1380に下げて試す
PrivateKey: 秘密鍵(.key)の中身を貼り付ける
ListenPort: WireGuardのサービスポート番号。
サーバー側のデフォルトでは51820
DNS: 優先するDNSサーバーを指定できる
PostUp: WireGuardの起動時に実行するコマンドを記述。
ここでiptablesを設定することでポートフォワーディングなどを構築する
PostDown: 停止時に実行するコマンドを記述
[Peer]: 相手側の設定
PublicKey: 相手側の秘密鍵(.key)からペアリングした
公開鍵(.pub)の中身を貼り付ける
AllowedIPs: 相手がクライアントならば、VPN接続を許可したい
クライアントのIPリストを記述する。
対向がサーバーの場合にはサーバー側ネットワーク内にある接続機器のうちで
通信を許可するIPリストになる
Endpoint: (クライアントのときのみ使用)サーバーのIPとポートを指定
wg-quick
$ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.17.1/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.0.17.2/32 dev wg0
$ ip address
(...略...)
12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.17.1/32 scope global wg0
valid_lft forever preferred_lft forever
$ sudo wg-quick down wg0
[#] ip link delete dev wg0
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; disabled; vendor preset: enabled)
Active: active (exited) since Mon 2022-02-28 13:43:27 JST; 1min 2s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 1215 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 1215 (code=exited, status=0/SUCCESS)
CPU: 37ms
サーバーサイドのポートフォワード(IPv4)の設定確認
/etc/sysctl.conf
#...中略
#👇コメントアウトを外す
net.ipv4.ip_forward=1
#...以下省略
$ sudo sysctl -p
PostUp
PostDown
[Interface]
#...中略
#👇追加
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp3s0(※) -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp3s0(※) -j MASQUERADE
#...略
enp3s0
iptables
$ sudo systemctl restart wg-quick@wg0
$ sudo iptables -L -n -t nat
#...略
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
#...略
NATを越えるために〜ブロードバンドルータのポート開放
Wi-Fi高効率通信によりたくさん繋いでも安定のWiFi環境 TP-Link Wi-Fi無線LANルーター デュアルバンド ギガビット Archer A10
[詳細設定] > [NAT転送] > [仮想サーバー]
余談〜ラズパイでPiVPNを使ったVPNサーバーの構築
WireGuardクライアントを試す
#....
[Peer]
#....
#EndPoint = [グローバルIPアドレス]:51820
#👇ローカルでWireGuardを試す場合
EndPoint = [サーバー機のプライベートIPアドレス]:51820
#....
別のLinuxOSクライアントで試す
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = vvvvvvvvvvvvvvvvvvvvvv (※wgclient.key)
Address = 10.0.17.2/32 (※クライアントのIPアドレス)
ListenPort = 51820
[Peer]
PublicKey = zzzzzzzzzzzzzzzzzzzzzzz (※wgserver.pub)
#EndPoint = [(自宅の)グローバルIPアドレス]:51820
EndPoint = [WireGuardサーバー機のプライベートIPアドレス]:51820
AllowedIPs = 0.0.0.0/0 (※WireGuardサーバー側にある通信したいIPアドレス)
[Interface]
[Peer]
[Interface]
wgclient.key
AllowedIPs
10.0.17.2
[Peer]
wgserver.pub
EndPoint
AllowedIPs
0.0.0.0/0
10.0.17.1/32
$ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.17.2/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
$ ping 10.0.17.1
PING 10.0.17.1 (10.0.17.1) 56(84) bytes of data.
64 bytes from 10.0.17.1: icmp_seq=1 ttl=64 time=674 ms
64 bytes from 10.0.17.1: icmp_seq=2 ttl=64 time=2.10 ms
64 bytes from 10.0.17.1: icmp_seq=3 ttl=64 time=2.29 ms
#.....
--- 10.0.17.1 ping statistics ---
15 packets transmitted, 15 received, 0% packet loss, time 32ms
rtt min/avg/max/mdev = 1.820/46.805/674.177/167.672 ms
wg
$ sudo wg
interface: wg0
public key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
private key: (hidden)
listening port: 51820
peer: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
endpoint: xxx.xxx.xxx.xxx:51820
allowed ips: 10.0.17.2/32
latest handshake: 1 minute, 16 seconds ago
transfer: 11.80 KiB received, 18.87 KiB sent
10.0.17.2
余談〜おらが村のインターネット事情:グローバルIP...じゃない?
☆家でも外でも利用可能なWi-Fiルーター☆ DTI WiMAX 2+
☆割安なグローバルIP固定プラン☆
☆グローバルIP固定に最適☆ ASAHIネット WiMAX2+
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー