本家様 https://www.wireguard.com/

ほんとシンプルな VPN

公開鍵暗号方式を使ったVPN. VPNっていうよりはトンネルを作るっていうのが適切なのかも
WireGuard サーバに向けてのnicが追加され、OS上のアプリがそのnicを経由して繋がると. nicなのでsshの他にもsmbも通れると.

ただ注意点としては ユーザ認証 がない. ノートPCにWireGuardが入っていてそれを紛失したら....まぁそれはパスワードて同じことですが.
WireGuard/ubuntu20
WireGuard/RockyLinux9
WireGuard/RockyLinux8
*RHEL7/RHEL8系のマシンでWireGuardは使わない方がいいみたい. RHEL9系に行った方がよさげ
https://lists.zx2c4.com/pipermail/wireguard/2022-June/007664.html

WireGuard/interlink
WireGuard/log

より強い認証が必要ならGuacamoleが宜しいかと. 二段階認証も使えますから

2023y02m07d_085251825.png

パッケージのインストール.

centos7は 2024 年 6 月 30 日 にサポート終了なので別のOSで構築すべきですが、そうも言えないところもありますね.
サポートが切れているので基本「yum update」としても機能しないです.
その場合は CentOS/repo に記載の通り「/etc/yum.repos.d/CentOS-Base.repo」を修正してください.

[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
 
[root@centos7 ~]# uname -r
3.10.0-1160.119.1.el7.x86_64
 
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install dkms
 
[root@centos7 ~]# curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
[root@centos7 ~]# sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/jdoss-wireguard-epel-7.repo
 
[root@centos7 ~]# yum install --enablerepo=copr:copr.fedorainfracloud.org:jdoss:wireguard wireguard-dkms -y    <-- dkms向けのソースがインストールされてdkms経由でkmodが用意されます
 
[root@centos7 ~]# dkms status
wireguard/1.0.20220627, 3.10.0-1160.119.1.el7.x86_64, x86_64: installed
 
[root@centos7 ~]# yum install wireguard-tools

これでパッケージのインストールは完了です

firewallを無効にする

firewalldは止めます. SELinuxは有効でも構いません.

[root@centos7 ~]# systemctl stop firewalld
[root@centos7 ~]# systemctl disable firewalld
 
[root@centos7 ~]# getenforce
Enforcing
[root@centos7 ~]#

セキュアブートは無効にします. このosではBIOSモードで作っているので無効でした.

[root@centos7 ~]# mokutil --sb-state
EFI variables are not supported on this system
[root@centos7 ~]#

ルーティングを許可する

[root@centos7 ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
 
[root@centos7 ~]# sysctl -p

WireGuard サーバに 新たなnic(仮想, WireGuard 向け)「wg0」を拵える

現状は

[root@centos7 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether bc:24:11:d7:fb:30 brd ff:ff:ff:ff:ff:ff
 
[root@centos7 ~]# ip addr show dev ens192 scope global
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:24:11:d7:fb:30 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.107/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0
       valid_lft 43152sec preferred_lft 43152sec
 
[root@centos7 ~]#

2つのnicが見える. 片方はループバックなので実質1つのnicを持ってます. eth0で 192.168.0.107/24 です.
ここにWireGuard 向けの仮想的なnic[wg0]を作ることになります

まずはWireGuardサーバのWireGuard 向け公開鍵を作ります

[root@centos7 ~]# cd /etc/wireguard/
[root@centos7 wireguard]# umask 077
[root@centos7 wireguard]# wg genkey > privatekey    <--- 秘密鍵の作成 
 
[root@centos7 wireguard]# wg pubkey < privatekey > publickey  <--- 秘密鍵から公開鍵を作成
 
[root@centos7 wireguard]# ls -l
total 8
-rw-------. 1 root root 45 Feb 13 19:12 privatekey
-rw-------. 1 root root 45 Feb 13 19:12 publickey
[root@centos7 wireguard]#
[root@centos7 ~]# cat /etc/wireguard/publickey
hlRGpHDqrO247Hx/zyJaV/ZYdpb2PHLIb4kIuoPig1E=           <-- 公開鍵
 
[root@centos7 ~]# cat /etc/wireguard/privatekey        <-- 秘密鍵
2PXX51JlZiqu8CQaTHAZVIAyVToGGh+X4bKi6Z0CSUY=
 
[root@centos7 ~]#

次にnic「wg0」を作るのですが、設定ファイルはnicデバイス名を持たせて「/etc/wireguard/wg0.conf」となる
ここでは「wg0」を「10.10.10.0/24」に所属させ「10.10.10.1/24」を持たせる

[root@centos7 ~]# cat /etc/wireguard/privatekey
2PXX51JlZiqu8CQaTHAZVIAyVToGGh+X4bKi6Z0CSUY=
 
[root@centos7 ~]# vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = 2PXX51JlZiqu8CQaTHAZVIAyVToGGh+X4bKi6Z0CSUY=       <--- この文字列は「/etc/wireguard/privatekey」の中身
Address = 10.10.10.1/32
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
 
[root@centos7 ~]#

っでupさせてみる

[root@centos7 ~]# wg-quick up /etc/wireguard/wg0.conf
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.10.10.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
 
[root@centos7 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether bc:24:11:d7:fb:30 brd ff:ff:ff:ff:ff:ff
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none
 
[root@centos7 ~]# ip addr show dev wg0 scope global
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.10.10.1/32 scope global wg0
       valid_lft forever preferred_lft forever
 
[root@centos7 ~]#

っが再起動すると「wg0」は消えてしまいます. 永続的に存在せるには下記のようにします.

[root@centos7 ~]# systemctl enable wg-quick@wg0.service
Created symlink from /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service to /usr/lib/systemd/system/wg-quick@.service.
 
[root@centos7 ~]#

再起動しても上手くwg0が現れない場合は、手動で「wg-quick up wg0」を実行します. 手動が面倒なら crontabで@reboot枠で仕込む.

外から中のWireGuardサーバに通すために、外向けのIPの443 or 8080 or 8888 が、内部WireGuardサーバ「192.168.0.107」の51820portに繋ぐとかのポートフォワードをルータに設定しておく
下記「ルータの設定」参照

クライアントの設定

流れとしてはクライアント側で公開鍵を作り、
それをWireGuardサーバに登録. その際WireGuardの独自LAN(ここでは 10.10.10.0/24)でのipアドレスと、WireGuardサーバの公開鍵、WireGuardサーバの表向けのIPとport番号を受領する.
クライアント側で独自LANのIP、WireGuardサーバの公開鍵、WireGuardサーバの表向けのIPとport番号を設定する

■windowsクライアント
https://www.wireguard.com/install/からwindowsパッケージを取得します
2023y02m07d_030019761.png
ダウンロードしたパッケージ「wireguard-installer.exe」(86kB)を起動させインストールを完了させます。
完了すると下記のような画面が表示されます
2023y02m07d_030641129.png
左のボックス内で右クリックから「空のトンネルを追加..」を選びます
2023y02m07d_031007693.png
「トンネルの編集」画面が表示され、クライアントの「公開鍵」と「秘密鍵」が表示されます. 名前欄に接続先に関する名称を入れて「保存ボタン」を押下します
この「公開鍵」と「秘密鍵」は右クリックから「空のトンネルを追加..」で毎回違った値を出します
2025y02m13d_212734216.png
元の画面に戻ります. 作った「chaperone-connect」が用意されました。
2025y02m13d_212901144.png

手続き的に次は、ここで表示されている公開鍵「jvNVzJPFa3HnydxM7nvrOiaqp3zznx4nUHqeIbOk0zM=」をWireGuardサーバに登録します

■WireGuardサーバ
公開鍵「jvNVzJPFa3HnydxM7nvrOiaqp3zznx4nUHqeIbOk0zM=」に持たせるipは「10.10.10.10/32」とします
そうなると「/etc/wireguard/wg0.conf」は下記のように追記して [Peer]項目がクライアントごとに増えます

[root@centos7 ~]# vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = 2PXX51JlZiqu8CQaTHAZVIAyVToGGh+X4bKi6Z0CSUY=
Address = 10.10.10.1/32
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
 
# note-PC[HP EliteBook]
[Peer]
PublicKey = jvNVzJPFa3HnydxM7nvrOiaqp3zznx4nUHqeIbOk0zM=          <--windowsクライアントの公開鍵
AllowedIPs = 10.10.10.10/32                                       <--windowsクライアントに割り当てたIPアドレス
 
[root@centos7 ~]#

設定を反映させる

[root@centos7 ~]# systemctl restart wg-quick@wg0.service
 
(上手く行かない場合は下記を実施する)
[root@centos7 ~]# wg-quick down /etc/wireguard/wg0.conf
[root@centos7 ~]# wg-quick up /etc/wireguard/wg0.conf

WireGuardサーバ側の設定は以上で完了です。

次に再度 windowsクライアント側での作業になります。

windowsクライアント側には 受け取った公開鍵に振ったIPアドレス「10.10.10.10/32」と
WireGuardサーバの公開鍵「/etc/wireguard/publickey」の中身「hlRGpHDqrO247Hx/zyJaV/ZYdpb2PHLIb4kIuoPig1E=」と
WireGuardサーバの表向けのIPとport番号、例えば「web.chaperone.jp」「443」を伝える

■(再び)windowsクライアント
「編集」ボタンを押下して「トンネルの編集」画面を表示させて
[Interface]欄に「Address」項目を設置して割り当てられたIPアドレスを指定します
そして[Peer]欄を設けて、「PublicKey」項目にはWireGuardサーバの公開鍵を
「AllowedIPs」項目は行動範囲なip範囲. ここではWireGuardサーバ自身と内部のネットワークを指定してます
「Endpoint」項目はWireGuardサーバの表向けのIPとport番号を入力します
2025y02m13d_214138045.png
保存ボタンを押下すると元の画面に戻って下記のようになります. 「有効化」ボタンを押下すればVPN接続になります.

2025y02m13d_214328220.png

DNS

WireGuardの中に入ってそのネットワーク上にあるDNSを参照したいなら、
windowsクライアントの設定で[Interface]欄に追加で
「DNS = 192.168.0.3」
とDNSを登録すればいいみたい。

ルータの設定

こちらでは Yamahaルータ を使っている
っでportフォワードの設定ですが、[詳細設定]->[NAT]で「NATディスクリプターの一覧」から「設定」を押下します
2023y02m08d_023247479.png

画面下部の「静的IPマスカレードの設定」を広げて、「+」ボタンで一行を足して下記のように追記します
2023y02m08d_023341292.png
「内側アドレス」は内部で作ったWireGuardサーバのIPアドレス
「プロトコル」は「udp」
「ポート番号」は「https=51820」. これは外側から来たhttps要求を「内側アドレス」へport: 51820 に変換して渡してます.

外向けには https で運用してますよと言いながら、WireGuardを実は運営できるって感じです.
外からグローバルIP:443に繋げても何も表示されないです. 別に22番portで運用しても問題ないかも.

当然ながら443をhttpサービスで既に使っているなら別のport番号を当ててください.

ルータの設定(firewall-cmd)

YamahaルータではなくLinuxのfirewalldでルータを運用しているなら firewall-cmd で portフォワードを定義します

firewall-cmd --zone=external --add-forward-port=port=443:proto=udp:toport=51820:toaddr=192.168.0.107 --permanent
firewall-cmd --reload

これでexternalに届いた443/udpのリクエストは内部の「192.168.0.107:51820」へportフォワードされます.

最新の60件
2025-03-23 2025-03-22 2025-03-20 2025-03-17 2025-03-16 2025-03-15 2025-03-10 2025-03-08 2025-03-06 2025-03-03 2025-03-02 2025-03-01 2025-02-23 2025-02-18 2025-02-17 2025-02-14
  • WireGuard
2025-02-12 2025-02-03 2025-02-02 2025-01-27 2025-01-26 2025-01-25 2025-01-24 2025-01-23 2025-01-20 2025-01-13 2025-01-12 2025-01-08 2024-12-30 2024-12-29 2024-12-22 2024-12-20 2024-12-17 2024-12-15 2024-12-14 2024-12-12 2024-12-11 2024-12-10 2024-12-09 2024-11-28 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06 2024-11-05

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-02-14 (金) 02:20:05