0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Wireguard(その1)&久しぶりにGNS3(その40)

Posted at

Wireguardを試す

Linuxでサイト間VPN(+暗号化)を試そうと調べていたところ、WireguardがEasyらしいということがわかり、試してみることにした。シリーズ投稿中の「Network Namespace」で実現したかったのであるが、まずは確実なGNS3のVM環境でトライ。

情報

下記サイトをもとに設定。

ネットワーク環境

下記環境。

Topology1.png

  • WireguardによるVPNをRouter1-Router2間で確立
    • Router1およびRouter2ネットワーク:172.16.1.0/24
    • Wireguardトンネルネットワーク:10.1.1.0/24
    • 両端ネットワーク192.168.10.0/24および192.168.20.0/24がトンネル対象ネットワーク

設定

Router1およびRouter2での設定である。

ルーティング

/etc/sysctl.conf
net.ipv4.ip_forward=1

Wireguard

秘密鍵と公開鍵の作成

Router1での設定(Router2でも同様)。

$ wg genkey | sudo tee /etc/wireguard/wg1.secret | wg pubkey | sudo tee /etc/wireguard/wg1.public
  • wg1.secret:秘密鍵
  • wg1.public:公開鍵(Router2に渡す)

鍵情報やIPアドレスの設定

こちらもRouter1での設定(Router2でも同様)。

Router1:~$ sudo cat /etc/wireguard/wg1.conf
[Interface]
PrivateKey = 2Cd38b+7RDpOG7MjDNaWQ1Hi9n7/pgqohxtcQDsbZ1M=
Address = 10.1.1.1/30
ListenPort = 61000

[Peer]
PublicKey = uPvlAwRi5m1XJ7sZMnyOfDTqUKWI5IPYQEXK+pK6k1Q=
AllowedIPs = 10.1.1.2/32,192.168.20.0/24
Endpoint = 172.16.1.2:61000
  • [Interface]:自身の設定
    • PrivateKey:秘密鍵
    • Address:VPNとしてのIPアドレス
    • ListenPort:待ち受けするUDPポート
  • [Peer]:相手の設定
    • PublicKey:公開鍵
    • AllowedIPs:VPN対象とする相手側のIPアドレス
    • 相手のIPアドレスおよび接続ポート

鍵や設定情報を置く場所

同じくRouter1の情報。/etc/wireguardに配置。

Router1:~$ sudo ls -l /etc/wireguard/
total 16
-rw-r--r-- 1 root   root   245 Dec 10 10:54 wg1.conf
-rw-r--r-- 1 root   root    45 Dec  9 08:27 wg1.public
-rw-r--r-- 1 root   root    45 Dec  9 08:27 wg1.secret
-rw-r--r-- 1 debian debian  45 Dec  9 08:33 wg2.public

自明(wg1.publicは、Router1では不要)。

検証

起動

まずはWireguardを起動。下記はRouter1での様子。

Router1:~$ sudo wg-quick up wg1
[#] ip link add wg1 type wireguard
[   98.400558] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[   98.406853] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[#] wg setconf wg1 /dev/fd/63
[#] ip -4 address add 10.1.1.1/30 dev wg1
[#] ip link set mtu 1420 up dev wg1
[#] ip -4 route add 192.168.20.0/24 dev wg1
  • wg1というトンネルネットワークインターフェースを作成
  • IPアドレスアサイン
  • MTU設定(Wireguardは80(=1500-1420)バイトのヘッダサイズ?)
  • 対向トンネルネットワークのスタティックルート設定

終了

念のため終了も記載。

Router1:~$ sudo wg-quick down wg1
[#] ip link delete dev wg1
  • トンネルネットワークインターフェース削除

末端PCどうしの疎通&パケット確認

左端PCから右端PCへのping実行。

PC1> ping 192.168.20.2

84 bytes from 192.168.20.2 icmp_seq=1 ttl=62 time=46.837 ms
84 bytes from 192.168.20.2 icmp_seq=2 ttl=62 time=9.248 ms
84 bytes from 192.168.20.2 icmp_seq=3 ttl=62 time=10.382 ms
84 bytes from 192.168.20.2 icmp_seq=4 ttl=62 time=3.290 ms
84 bytes from 192.168.20.2 icmp_seq=5 ttl=62 time=12.983 ms

この時のWiresharkデータを見る。

基本シーケンス

1_Wireguard.png

  • WireguardはUDPパケット上でやりとりされている
  • Handshake
    • Initiation
    • Response
  • Transport Data
    • ここでは、上記ping5回分のデータのようだ
  • Keepalive

IPsec/IKEと比べるとネゴシエーションが少ない。

ポート番号に依存せず、解釈してくれる?

ここは、Wiresharkの話。設定ファイルでポート61000を指定しても(下記)、

2_Port61000+Init.png

ポート番号31000を指定しても(下記)

3_Port31000+CryptDataのコピー.png

Wiresharkでは、Wireguardと把握してくれる。スマート。

なお、上記は、Handshake InitiationおよびTransportパケットの詳細でもある。内容は割愛。

参考までに、他のパケットの詳細も紹介。こちらは、Handshake Response。

HandshakeResponse.png

こちらはKeepalive。

4_Port61000+KeepAlive.png

Router2とPC2との間

参考までに、Wireguard通過(デコード)後のWiresharkデータも紹介。

5_pingBetweenR2andPC2.png

当然だが、生データが見える。

EOF

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?