2枚のnicを持つ計算機が外部と内部のゲートウエイ的な枠割を持っていて、それにWireGuardが載せられるか?
内部のネットワークにWireGuard専用マシンを用意して、ゲートウエイなマシンが外部からの特定ポートをそのWireGuardマシンに渡すならWireGuardと同じでいい。
それがゲートウエイマシンに内包したらできるのか?が発端.
.....色々試してみたが、、無理でした...
やりようがあるのだろうが、見つけられなかったのが正解かな.
なので上記図の左側について詳細を.
ゲートウエイのipアドレス体系
デバイス | ipアドレス | GWアドレス |
ens192 | 192.168.0.100 | 192.168.0.1 |
ens224 | 10.10.10.1 | - |
[root@gate ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:70:ef:c7 brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 192.168.0.100/24 brd 192.168.0.255 scope global dynamic noprefixroute ens192
valid_lft 42980sec preferred_lft 42980sec
inet6 fe80::20c:29ff:fe70:efc7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:70:ef:d1 brd ff:ff:ff:ff:ff:ff
altname enp19s0
inet 10.10.10.1/24 brd 10.10.10.255 scope global noprefixroute ens224
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe70:efd1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@gate ~]# ip route
default via 192.168.0.1 dev ens192 proto dhcp src 192.168.0.100 metric 100
10.10.10.0/24 dev ens224 proto kernel scope link src 10.10.10.1 metric 101
192.168.0.0/24 dev ens192 proto kernel scope link src 192.168.0.100 metric 100
[root@gate ~]#
firewall-cmdで外向け(192.168.0.0/24)は external へ、内向け(10.10.10.0/24)は trusted に
[root@gate ~]# nmcli connection modify ens192 connection.zone external
[root@gate ~]# nmcli connection modify ens224 connection.zone trusted
[root@gate ~]# firewall-cmd --get-active-zones
external
interfaces: ens192
trusted
interfaces: ens224
[root@gate ~]# firewall-cmd --add-port=51820/udp --zone=external --permanent <--- 外部のwireguard向けport:51820を開ける
[root@gate ~]# firewall-cmd --reload
ゲートウエイに届いた WireGuard への通信(port:51820)を内部の WireGuardマシン(10.10.10.2:51820)に転送させる
[root@gate ~]# firewall-cmd --zone=external --add-forward-port=port=51820:proto=udp:toport=51820:toaddr=10.10.10.2 --permanent
[root@gate ~]# firewall-cmd --reload
[root@gate ~]# firewall-cmd --list-all --zone=external
external (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: ssh
ports: 51820/udp <--- 外部からのwireguardポートを開ける
protocols:
forward: yes
masquerade: yes
forward-ports:
port=51820:proto=udp:toport=51820:toaddr=10.10.10.2 <--- 受け取ったwireguardパケットを内部のwireguardマシンへ転送する
source-ports:
icmp-blocks:
rich rules:
[root@gate ~]#
WireGuardの通りだが再度.
マシン名 wg、ipアドレス 10.10.10.2、gw先 10.10.10.1
[root@gate ~]# ssh 10.10.10.2
[root@wg ~]# cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
[root@wg ~]# getenforce
Enforcing
[root@wg ~]# firewall-cmd --get-active-zones
public
interfaces: ens192
[root@wg ~]# firewall-cmd --add-port=51820/udp --zone=public --permanent <-- gateから転送されたwireguardパケットを受け取る
[root@wg ~]# firewall-cmd --reload
wireguardのインストールと設定(wg0を作ります)
[root@wg ~]# dnf install epel-release -y && dnf install wireguard-tools -y
[root@wg ~]# cd /etc/wireguard/
[root@wg wireguard]# umask 077
[root@wg wireguard]# wg genkey > privatekey
[root@wg wireguard]# wg pubkey < privatekey > publickey
[root@wg wireguard]# cat privatekey
gEWhEGQ/Sc9BZpVLRwTbaZaQ4ZITiVw1n2BZlr+a700=
[root@wg wireguard]# cat pubkey
PaTUqaQnVSDna13c3w1gpOQWklPrH/MRMWqdow2eeDY=
[root@wg wireguard]# vi wg0.conf
[Interface]
PrivateKey = gEWhEGQ/Sc9BZpVLRwTbaZaQ4ZITiVw1n2BZlr+a700=
Address = 172.16.0.1/32
ListenPort = 51820
[root@wg wireguard]#
[root@wg wireguard]# ip addr show dev wg0 scope global
Device "wg0" does not exist.
[root@wg wireguard]# wg-quick up /etc/wireguard/wg0.conf
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 172.16.0.1/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[root@wg wireguard]#
(確認)
[root@wg wireguard]# 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 172.16.0.1/32 scope global wg0
valid_lft forever preferred_lft forever
[root@wg wireguard]# wg-quick down /etc/wireguard/wg0.conf
[root@wg wireguard]# systemctl enable wg-quick@wg0 <--サービスの永続化
gateの前側にあるwindowsマシンにwireguardのクライアントをインストールして、クライアント側の公開鍵をwireguardサーバに登録する
ここではクライアント側の公開鍵は「mTXx9KZiBcf3SSfLiAmQTr6ZYqJh0ptP6DDCIdqubSE=」なので
[root@wg ~]# vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = gEWhEGQ/Sc9BZpVLRwTbaZaQ4ZITiVw1n2BZlr+a700=
Address = 172.16.0.1/32
ListenPort = 51820
PostUp = firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o ens192 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o ens192 -j MASQUERADE; firewall-cmd --add-port=51820/udp
PostDown = firewall-cmd --zone=public --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg0 -o ens192 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o ens192 -j MASQUERADE; firewall-cmd --remove-port=51820/udp
# windows マシンの追加
[Peer]
PublicKey = mTXx9KZiBcf3SSfLiAmQTr6ZYqJh0ptP6DDCIdqubSE=
AllowedIPs = 172.16.0.2/32
[root@wg ~]# wg-quick down /etc/wireguard/wg0.conf
[root@wg ~]# wg-quick up /etc/wireguard/wg0.conf
[root@wg ~]# wg
interface: wg0
public key: PaTUqaQnVSDna13c3w1gpOQWklPrH/MRMWqdow2eeDY=
private key: (hidden)
listening port: 51820
peer: mTXx9KZiBcf3SSfLiAmQTr6ZYqJh0ptP6DDCIdqubSE=
allowed ips: 172.16.0.2/32
[root@wg ~]# iptables -L FORWARD -v
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- wg0 ens192 anywhere anywhere
[root@wg ~]# iptables -t nat -L POSTROUTING -v
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any ens192 anywhere anywhere
[root@wg ~]#
wireguardサーバで新規のwindowsクライアント向けのipを 172.16.0.2 としたので、それをwindows側に反映させる. あと相手先情報[Peer](wireguardサーバの情報)を載せる
あとはクライアントを有効にすれば繋がります
「systemctl start wg-quick@wg0」はselinuxに引っかかる.
[root@wg ~]# cat permissive-wireguard.cil
(typepermissive wireguard_t)
[root@wg ~]# semodule -i permissive-wireguard.cil
これでselinuxからのエラーを回避できます
「wg-quick up /etc/wireguard/wg0.conf」の後に「systemctl restart wg-quick@wg0」はエラーになります
「wg-quick down /etc/wireguard/wg0.conf」の後の「systemctl restart wg-quick@wg0」はok