ソフトウェア/WireGuard の変更点
更新- 追加された行はこの色です。
- 削除された行はこの色です。
- ソフトウェア/WireGuard へ行く。
- ソフトウェア/WireGuard の差分を削除
#author("2025-06-06T09:46:39+00:00","default:administrator","administrator") #author("2025-06-06T09:47:13+00:00","default:administrator","administrator") * WireGuard で VPN 接続を行う [#iddffd9c] WireGuard について調べよう。 https://deep.tacoskingdom.com/blog/142 ここで紹介されていた通りに作業したところ、うまく繋がった ** WireGuard のインストール [#odcc564c] LANG: console $ lsb_release -a # 基本OS情報 No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 12 (bookworm) Release: 12 Codename: bookworm $ cat /etc/debian_version # Debianのマイナーバージョン 12.11 $ uname -srv # Linuxカーネルの情報 Linux 5.10.0-28-amd64 #1 SMP Debian 5.10.209-2 (2024-01-31) $ sudo apt install wireguard # インストール 以下の追加パッケージがインストールされます: wireguard-tools 提案パッケージ: openresolv | resolvconf 以下のパッケージが新たにインストールされます: wireguard wireguard-tools アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。 95.8 kB のアーカイブを取得する必要があります。 この操作後に追加で 346 kB のディスク容量が消費されます。 $ wg --version wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/ ** 鍵の生成 [#w6b0b9f0] WireGuard で接続を確立するには事前にサーバーとクライアントのカギを互いに交換しておく必要がある。 本当はクライアントのカギはクライアント側で作って公開鍵のみサーバーに送ればいいのだけれど、 ここでは両方ともサーバーで作っちゃう。 LANG: console $ sudo su # スーパーユーザーに切り替え # cd /etc/wireguard # ls -la # 設定が空なことと一般ユーザーが読めないことを確認 合計 28 drwx------ 2 root root 4096 6月 6 13:14 . drwxr-xr-x 121 root root 12288 6月 6 13:10 .. # wg genkey > wgserver.key # サーバー用秘密鍵 # wg pubkey < wgserver.key > wgserver.pub # サーバー用公開鍵 # wg genkey > wgclient.key # クライアント用秘密鍵 # wg pubkey < wgclient.key > wgclient.pub # クライアント用公開鍵 # chmod 600 *.key # 所有者以外が読めないようにする # ls -la 合計 32 drwx------ 2 root root 4096 6月 6 13:15 . drwxr-xr-x 121 root root 12288 6月 6 13:10 .. -rw------- 1 root root 45 6月 6 13:14 wgclient.key -rw-r--r-- 1 root root 45 6月 6 13:15 wgclient.pub -rw------- 1 root root 45 6月 6 13:13 wgserver.key -rw-r--r-- 1 root root 45 6月 6 13:14 wgserver.pub # exit # スーパーユーザーから抜ける $ ** サーバーの設定&起動テスト [#v1486078] LANG:console $ sudo jed /etc/wireguard/wg0.conf [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 $ 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 ... 76311: 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 ... これで起動した。 以上はあくまでテストなので、一旦WireGuardサーバー落とす。 LANG:console $ sudo wg-quick down wg0 [#] ip link delete dev wg0 ** サービスとして常駐化させる [#ta68047e] LANG:console $ sudo systemctl enable wg-quick@wg0 Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service. $ 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; enabled; preset: enabled) Active: active (exited) since Fri 2025-06-06 13:28:44 JST; 47s 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: 1874337 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 1874337 (code=exited, status=0/SUCCESS) CPU: 26ms 6月 06 13:28:44 xxxxx systemd[1]: Starting wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0... 6月 06 13:28:44 xxxxx wg-quick[1874337]: [#] ip link add wg0 type wireguard 6月 06 13:28:44 xxxxx wg-quick[1874337]: [#] wg setconf wg0 /dev/fd/63 6月 06 13:28:44 xxxxx wg-quick[1874337]: [#] ip -4 address add 10.0.17.1/32 dev wg0 6月 06 13:28:44 xxxxx wg-quick[1874337]: [#] ip link set mtu 1420 up dev wg0 6月 06 13:28:44 xxxxx wg-quick[1874337]: [#] ip -4 route add 10.0.17.2/32 dev wg0 6月 06 13:28:44 xxxxx systemd[1]: Finished wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0. $ ip address ... 76312: 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 ... ** ポートフォワード(IPv4)を許可 [#z9f828f1] LANG: console $ grep ip_forward /etc/sysctl.conf # はじめ無効になっていた #net.ipv4.ip_forward=1 $ sudo jed /etc/sysctl.conf # 有効化する - #net.ipv4.ip_forward=1 + net.ipv4.ip_forward=1 $ sudo sysctl -p # 変更を反映 net.ipv4.ip_forward = 1 net.ipv4.tcp_keepalive_time = 300 ** IPマスカレードの設定 (wg0.conf) [#rd795a0a] 起動時と終了時に IP マスカレードについて iptables を書き換えるよう設定する。 LANG:console $ ip addr # インターフェース名を確認 ... 2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 6c:4b:90:f5:6e:dc brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 brd 192.168.0.255 scope global enp3s0f0 valid_lft forever preferred_lft forever ... $ sudo jed /etc/wireguard/wg0.conf [Interface] ... + PostUp = iptables -A FORWARD -i wg0 -j ACCEPT + PostUp = iptables -t nat -A POSTROUTING -o enp3s0f0 -j MASQUERADE + PostDown = iptables -D FORWARD -i wg0 -j ACCEPT + PostDown = iptables -t nat -D POSTROUTING -o enp3s0f0 -j MASQUERADE $ sudo systemctl restart wg-quick@wg0 # 設定を反映 $ sudo iptables -L -n -t nat ... Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE 0 -- 0.0.0.0/0 0.0.0.0/0 ... ** ファイアウォールの設定 [#k55cf0a4] ufw を使って ipv4 による 51820/udp へのアクセスを許可した。 LANG: console $ ufw allow proto udp to 0.0.0.0/0 port 51820 ** ルータのポートマッピング [#z6c0d803] ポートマッピングを設定して、外からの 58120 へのアクセスを WireGuard サーバーへ転送するようにした。 - WAN 側ポート: 58120 - LAN 側ホスト: 192.168.0.5 - プロトコル: UDP - ポート: 58120 ** クライアント [#f6b5faf3] クライアントとなる Windows マシンに WireGuard をインストールして、 「空のトンネルを追加」から、 [Interface] PrivateKey = (wgclient.key の内容) Address = 10.0.17.2/32 [Peer] PublicKey = (wgserver.pub の内容) AllowedIPs = 10.0.17.1/32,192.168.0.0/24 (VPN 経由で通信したいアドレス範囲) Endpoint = (ルーターの外向きアドレス):51820 PersistentKeepalive = 25 とした。 VPN 経由で通信したいアドレス範囲を AllowedIPs に設定している。 この接続を「有効化」したところ、 ちゃんと 192.168.0.xxx へのアクセスが VPN を経由して繋がるようになった。 クライアント側の WireShark のログで Sending handshake initiation to peer 1 (xxx.xxx.xxx.xxx:51820) Receiving handshake response from peer 1 (xxx.xxx.xxx.xxx:51820) Keypair 1 created fo peer 1 と出れば接続はうまく行っている。 これが、 Handshake for peer 1 (xxx.xxx.xxx.xxx:51820) did not complete after 5 seconds, retrying (try ?) などとなっているのはそもそもサーバーへの通信がうまく行っていないので、 - ルーターのポートマッピング設定 - ファイアウォール設定 - サーバーの起動状態 をチェックするとよい。 VPN サーバーに接続できているのにその先に接続できない場合には以下をチェックする必要がある。 - クライアント側の AllowedIPs の設定 - クライアントマシンのローカル IP アドレス範囲と VPN で繋いだ先の LAN のローカル IP アドレス範囲がかぶっていないことを確認する -- かぶっていた場合にはどちらかを変えないとダメな気がする? -- どうにかすれば変換が可能? ああ、「ログ」を見なくても「ピア」で「直近のハンドシェイク」に時間が入っていれば正しく繋がっていることが確認できるわけか。 #ref(wireguard_handshake.png,,around,wrap,50%); #ref(wireguard_handshake.png,,50%,wrap); * コメント&質問 [#z75ebc0d] #article_kcaptcha
Counter: 142 (from 2010/06/03),
today: 2,
yesterday: 2