手当たり次第に書くんだ

飽きっぽいのは本能

VyOS OpenVPN Site-to-Site TLS

概要

設定

set interfaces openvpn vtun1 encryption cipher 'aes256gcm'
set interfaces openvpn vtun1 hash 'sha512'
set interfaces openvpn vtun1 local-address 192.168.101.1
set interfaces openvpn vtun1 local-port '30000'
set interfaces openvpn vtun1 mode 'site-to-site'
set interfaces openvpn vtun1 openvpn-option 'auth-nocache'
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 protocol 'udp'
set interfaces openvpn vtun1 remote-address '192.168.101.2'
set interfaces openvpn vtun1 tls ca-certificate 'ca.crt'
set interfaces openvpn vtun1 tls certificate 'vyos1.crt'
set interfaces openvpn vtun1 tls crypt-key 'ta.key'
set interfaces openvpn vtun1 tls dh-params 'dh.pem'
set interfaces openvpn vtun1 tls role 'passive'
set interfaces openvpn vtun1 tls tls-version-min '1.3'
set interfaces openvpn vtun1 encryption cipher 'aes256gcm'
set interfaces openvpn vtun1 hash 'sha512'
set interfaces openvpn vtun1 local-address 192.168.101.2
set interfaces openvpn vtun1 local-port '30000'
set interfaces openvpn vtun1 mode 'site-to-site'
set interfaces openvpn vtun1 openvpn-option 'auth-nocache'
set interfaces openvpn vtun1 openvpn-option 'remote-cert-tls server'
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 protocol 'udp'
set interfaces openvpn vtun1 remote-address '192.168.101.1'
set interfaces openvpn vtun1 remote-host '192.168.70.2'
set interfaces openvpn vtun1 remote-port '30000'
set interfaces openvpn vtun1 tls ca-certificate 'ca.crt'
set interfaces openvpn vtun1 tls certificate 'vyos2.crt'
set interfaces openvpn vtun1 tls crypt-key 'ta.key'
set interfaces openvpn vtun1 tls role 'active'
set interfaces openvpn vtun1 tls tls-version-min '1.3'

MTU

TunnelインターフェイスのMTU

デフォルトのTunnelインターフェイスのMTUは1500byteに設定されています。

vyos@vyos2:~$ ifconfig
vtun1: flags=4305  mtu 1500
        inet 192.168.101.2  netmask 255.255.255.255  destination 192.168.101.1
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 4  bytes 336 (336.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 640 (640.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

この為、Tunnelインターフェイス上で送信できるPingのデータサイズは1472byteが上限です。計算式:1472+20(IP)+8(ICMP)=1500byte。

vyos@vyos2:~$  /bin/ping 192.168.101.1 -c 4 -M do -s 1472
PING 192.168.101.1 (192.168.101.1) 1472(1500) bytes of data.
1480 bytes from 192.168.101.1: icmp_seq=1 ttl=64 time=1.43 ms
1480 bytes from 192.168.101.1: icmp_seq=2 ttl=64 time=0.576 ms
1480 bytes from 192.168.101.1: icmp_seq=3 ttl=64 time=1.42 ms
1480 bytes from 192.168.101.1: icmp_seq=4 ttl=64 time=1.42 ms

--- 192.168.101.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3034ms
rtt min/avg/max/mdev = 0.576/1.210/1.430/0.366 ms

物理インターフェイス上ではフラグメントされている

Tunnelインターフェイスは物理インターフェイス上に仮想的に作られたインターフェイスであり、本稿の設定ではUDPでカプセル化されています。つまり、UDPのオーバーヘッド分を考慮すると、物理インターフェイス上ではフラグメントされています。

同じようにTunnelインターフェイス上でPingを実行します。

vyos@vyos2:~$  /bin/ping 192.168.101.1 -c 4 -M do -s 1472
PING 192.168.101.1 (192.168.101.1) 1472(1500) bytes of data.
1480 bytes from 192.168.101.1: icmp_seq=1 ttl=64 time=1.43 ms
1480 bytes from 192.168.101.1: icmp_seq=2 ttl=64 time=0.576 ms
1480 bytes from 192.168.101.1: icmp_seq=3 ttl=64 time=1.42 ms
1480 bytes from 192.168.101.1: icmp_seq=4 ttl=64 time=1.42 ms

--- 192.168.101.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3034ms
rtt min/avg/max/mdev = 0.576/1.210/1.430/0.366 ms

対向の物理インターフェイス上でパケットを確認すると、flags [+]でフラグメントされていることが分かります。

当初、flags [+]の意味が分からずWireSharkで確認してたのですが、flags [+]はフラグメントされたパケット、flags [DF]はフラグメントされていないパケットのようです。

vyos@vyos1:~$ tcpdump -i eth0 port 30000 -vvv
08:21:56.515170 IP (tos 0x0, ttl 64, id 27135, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: UDP, length 1521
08:21:56.515344 IP (tos 0x0, ttl 64, id 34759, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: UDP, length 1521
08:21:57.515778 IP (tos 0x0, ttl 64, id 28004, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: UDP, length 1521
08:21:57.516167 IP (tos 0x0, ttl 64, id 35354, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: UDP, length 1521
08:21:58.517216 IP (tos 0x0, ttl 64, id 28892, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: UDP, length 1521
08:21:58.517363 IP (tos 0x0, ttl 64, id 36037, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: UDP, length 1521
08:21:59.572446 IP (tos 0x0, ttl 64, id 28895, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: UDP, length 1521
08:21:59.572550 IP (tos 0x0, ttl 64, id 36737, offset 0, flags [+], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: UDP, length 1521

少しずつ下げていき、1423byteでPingを実行します。

vyos@vyos2:~$  /bin/ping 192.168.101.1 -c 4 -M do -s 1423
PING 192.168.101.1 (192.168.101.1) 1423(1451) bytes of data.
1431 bytes from 192.168.101.1: icmp_seq=1 ttl=64 time=0.458 ms
1431 bytes from 192.168.101.1: icmp_seq=2 ttl=64 time=0.430 ms
1431 bytes from 192.168.101.1: icmp_seq=3 ttl=64 time=0.390 ms
1431 bytes from 192.168.101.1: icmp_seq=4 ttl=64 time=0.491 ms

--- 192.168.101.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3069ms
rtt min/avg/max/mdev = 0.390/0.442/0.491/0.037 ms

同じくパケットを確認すると、flags [DF]となり、フラグメントされていません。

vyos@vyos1:~$ tcpdump -i eth0 port 30000 -vvv
08:26:09.946196 IP (tos 0x0, ttl 64, id 13128, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: [udp sum ok] UDP, length 1472
08:26:09.946317 IP (tos 0x0, ttl 64, id 63366, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: [bad udp cksum 0x1330 -> 0x8195!] UDP, length 1472
08:26:10.966058 IP (tos 0x0, ttl 64, id 13325, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: [udp sum ok] UDP, length 1472
08:26:10.966155 IP (tos 0x0, ttl 64, id 63385, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: [bad udp cksum 0x1330 -> 0x2cdb!] UDP, length 1472
08:26:11.988437 IP (tos 0x0, ttl 64, id 13961, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: [udp sum ok] UDP, length 1472
08:26:11.988531 IP (tos 0x0, ttl 64, id 63735, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: [bad udp cksum 0x1330 -> 0x8550!] UDP, length 1472
08:26:13.014732 IP (tos 0x0, ttl 64, id 14434, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.3.30000 > 192.168.70.2.30000: [udp sum ok] UDP, length 1472
08:26:13.014839 IP (tos 0x0, ttl 64, id 63837, offset 0, flags [DF], proto UDP (17), length 1500)
    192.168.70.2.30000 > 192.168.70.3.30000: [bad udp cksum 0x1330 -> 0x1668!] UDP, length 1472

Tunnelインターフェイスのオーバーヘッド

物理インターフェイスのMTU:1500byteに収まるようにTunnelインターフェイスのMTUを求めると次のようになります。

①1423+①20+③8=1451byte

①Tunnelインターフェイス上のデータ送信において物理インターフェイス上でフラグメントされない最大サイズ
②IPヘッダー
③ICMPヘッダー

つまり、Tunnelインターフェイスのオーバーヘッドは1500-1451=49byteです。ただし、暗号化の方式、カプセル化をTCPにする等でオーバーヘッドは変化する為、設定内容に応じて確認が必要です。

UDPヘッダー:8byte

VyOS OpenVPN Site-to-Site TLS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る