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

ほんとシンプルな VPN

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

ただ注意点としては ユーザ認証 がない. ノートPCにWireGuardが入っていてそれを紛失したら....まぁそれはパスワードて同じことですが.
WireGuard/ubuntu20
WireGuard/RockyLinux9
WireGuard/RockyLinux8
WireGuard/interlink

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

2023y02m07d_085251825.png

[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
 
[root@centos7 ~]# uname -r
3.10.0-1160.el7.x86_64
 
[root@centos7 ~]# yum install epel-release elrepo-release 
 
[root@centos7 ~]# yum install kmod-wireguard wireguard-tools

もしkernelが「3.10.0-1160」以外なら dkmsで作れるようにします

[root@centos7 ~]# uname -r
3.10.0-1160.83.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 ~]# cat /etc/yum.repos.d/jdoss-wireguard-epel-7.repo
 
[root@centos7 ~]# yum install wireguard-dkms   <-- dkms向けのソースがインストールされてdkms経由でkmodが用意されます
 
[root@centos7 ~]# dkms status
wireguard/1.0.20220627, 3.10.0-1160.83.1.el7.x86_64, x86_64: installed
 
[root@centos7 ~]# modinfo wireguard
filename:       /lib/modules/3.10.0-1160.83.1.el7.x86_64/extra/wireguard.ko.xz
intree:         Y
alias:          net-pf-16-proto-16-family-wireguard
alias:          rtnl-link-wireguard
version:        1.0.20220627
author:         Jason A. Donenfeld <Jason@zx2c4.com>
description:    WireGuard secure network tunnel
license:        GPL v2
retpoline:      Y
rhelversion:    7.9
srcversion:     F54A3416733E9644E7DE623
depends:        udp_tunnel,ip6_udp_tunnel
vermagic:       3.10.0-1160.83.1.el7.x86_64 SMP mod_unload modversions
signer:         DKMS module signing key
sig_key:        FF:5D:D7:E0:7B:75:09:DF:CD:CD:B3:69:BF:C6:D5:6E:C2:FD:E7:53
sig_hashalgo:   sha256
 
[root@centos7 ~]# yum install wireguard-tools

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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:f6:a0:09 brd ff:ff:ff:ff:ff:ff
 
[root@centos7 ~]# ip addr show dev ens192 scope global
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:f6:a0:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.107/24 brd 192.168.0.255 scope global noprefixroute dynamic ens192
       valid_lft 42252sec preferred_lft 42252sec
 
[root@centos7 ~]#

2つのnicが見える. 片方はループバックなので実質1つのnicを持ってます. ens192で 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  7 02:21 privatekey
-rw-------. 1 root root 45 Feb  7 02:22 publickey
[root@centos7 wireguard]#

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

[root@centos7 ~]# vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = XXXXXXXXXXXXX4CGo4YXokmdOeEVXDSGuWayNNYsglE=       <--- この文字列は「/etc/wireguard/privatekey」の中身
Address = 10.10.10.1/32
ListenPort = 51820
 
[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 ~]#
 
(確認)
[root@centos7 ~]# ip addr show dev wg0 scope global
5: 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

外から中の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
「トンネルの編集」画面が表示され、クライアントの「公開鍵」と「秘密鍵」が表示されます. 名前欄に接続先に関する名称を入れて「保存ボタン」を押下します
この「公開鍵」と「秘密鍵」は右クリックから「空のトンネルを追加..」で毎回違った値を出します
2023y02m07d_031159057.png
元の画面に戻ります. 作った「chaperone-connect」が用意されました。
2023y02m07d_031700064.png

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

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

[root@centos7 ~]# vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = XXXXXXXXXXXXX4CGo4YXokmdOeEVXDSGuWayNNYsglE=
Address = 10.10.10.1/32
ListenPort = 51820
 
[Peer]
PublicKey = JPjP77zkEh9kOARtOsInnytux5RYciZuqYvrfAXbczM=
AllowedIPs = 10.10.10.10/32
 
[root@centos7 ~]#
 
(設定を反映させる)
[root@centos7 ~]# systemctl restart wg-quick@wg0.service

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

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

2023y02m07d_034846757.png

ip_forward

WireGuardサーバはルータ的な役割になります. なので、iptablesのFORWARDで今いる[10.10.10.0/24]から計算機がある[192.168.0.0/24]へ渡る必要がある.
iptablesは...ってfirewall-cmdで行うなら[wg0]の所属するzoneに「--add-masquerade」を入れればいいみたい
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/proc_configuring-firewalld-on-a-wireguard-server-using-the-command-line_assembly_setting-up-a-wireguard-vpn

ルータの設定

こちらでは 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件
2024-06-17 2024-06-16 2024-06-14 2024-06-12 2024-06-11 2024-06-10 2024-06-08 2024-06-07 2024-06-02 2024-06-01 2024-05-30 2024-05-16 2024-04-26 2024-04-18 2024-04-15 2024-04-11 2024-04-06 2024-04-05 2024-03-30 2024-03-29 2024-03-19 2024-03-17 2024-03-15 2024-03-06 2024-03-05 2024-03-03 2024-02-23 2024-02-22 2024-02-21 2024-02-20 2024-02-19 2024-02-18 2024-02-13 2024-02-12 2024-02-09 2024-02-04 2024-02-03 2024-01-31 2024-01-30 2024-01-29 2024-01-28 2024-01-22 2024-01-16

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-09 (木) 06:10:25