Why do we need it?
During encryption,
additional overhead will be added to the packets made by new headers and
features. This means that the actual size of the unencrypted TCP segment or UDP
datagram which holds the application will be reduced because the MTU of the
adapter is still same.
For example with
Ethernet and MTU of 1500-bytes, the unencrypted TCP segment can't be more than
1460-bytes. With encryption, for Ethernet and MTU of 1500, the unencrypted TCP
segment can't be more 1380 (can be different value). The 80-bytes difference are
utilized by encryption overhead.
Now the
value of unencrypted TCP segment can be more which leads to MTU more than
1500-bytes but this will cause the networking devices to fragment the packet
which is bad and should be avoided.
AnyConnect client
builds Virtual Adapter (VA) during installation on the clients machine. This VA
will receive unencrypted traffic and emulates Ethernet to forward traffic after
encryption. The actual traffic then goes over the physical adapter.
Therefore, we need
to know what is the MTU value of the VA and what is the max allowed size of
unencrypted traffic to avoid fragmentation. Later the applications need to make
sure that they don't create segments and datagrams larger else they will be fragmented.
How it works?
AnyConnect VA gets
its MTU value from SSL Server (ASA or IOS. We will focus more on ASA). The
default value is 1406-bytes. It can be configured as follow:
group-policy
custom_group_policy attributes
webvpn
anyconnect mtu 1420
Now the actual MTU
used by the VA will be selected based on the smaller between physical NIC MTU
and VA configured MTU. This is to avoid scenarios where the VA has MTU
configured more than physical NIC which will trigger fragmentation.
Next we need to find
out the max value of unencrypted payload. Two values will be calculated, one
for TLS Tunnel and one for DTLS tunnel. This can be viewed in ASA using the
command debug webvpn anyconnect 1
……
Iphdr=20
base-mtu=1300 def-mtu=1500 conf-mtu=1420
tcp-mss = 1260
path-mtu =
1260(mss)
TLS Block size
= 16, version = 0x301
mtu =
1260(path-mtu) - 0(opts) - 5(ssl) = 1255
mod-mtu =
1255(mtu) & 0xfff0(complement) = 1248
tls-mtu =
1248(mod-mtu) - 8(cstp) - 20(mac) - 1(pad) = 1219
DTLS Block
size = 16
mtu =
1300(base-mtu) - 20(ip) - 8(udp) - 13(dtlshdr) - 16(dtlsiv) = 1243
mod-mtu =
1243(mtu) & 0xfff0(complement) = 1232
dtls-mtu =
1232(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1210
computed
tls-mtu=1219 dtls-mtu=1210 conf-mtu=1420
DTLS enabled
for intf=2 (CORP)
tls-mtu=1219
dtls-mtu=1210
……
Let's examine the
debugs
Iphdr=20
base-mtu=1300 def-mtu=1500 conf-mtu=1420
!!!... Iphdr is 20 bytes, Physical NIC
MTU is 1300, configured MTU value for AnyConnect VA is 1420. Conclusion, Physical NIC MTU is used for
VA.
!!!... Now will start TLS Tunnel calculations
tcp-mss = 1260
path-mtu =
1260(mss)
!!!... Since TLS is TCP based, the TLS payload size
is MTU - 40. 40-bytes is 20-bytes IP Header + 20-bytes TCP Header
TLS Block size
= 16, version = 0x301
mtu =
1260(path-mtu) - 0(opts) - 5(ssl) = 1255
mod-mtu =
1255(mtu) & 0xfff0(complement) = 1248
tls-mtu =
1248(mod-mtu) - 8(cstp) - 20(mac) - 1(pad) = 1219
!!!... Subtracting headers (5-bytes ssl
header, 1-byte padding, 8-bytes Cisco SSL Tunneling Protocol (CSTP) header,
20-bytes MAC), we will get the size of unencrypted payload. This will be communicated back from ASA to
AnyConnect client so that applications shouldn't cross this value else
fragmentation will be triggered
!!!... Note:
ANDing MSS value will complement 0xfff0 is to make sure that MSS value is power
of 2
!!!... Now will start DTLS MTU calculations
DTLS Block
size = 16
mtu =
1300(base-mtu) - 20(ip) - 8(udp) - 13(dtlshdr) - 16(dtlsiv) = 1243
mod-mtu =
1243(mtu) & 0xfff0(complement) = 1232
dtls-mtu =
1232(mod-mtu) - 1(cdtp) - 20(mac) - 1(pad) = 1210
!!!... Subtracting headers (20-bytes IP
header, 8-bytes UDP header, 13-bytes DTLS header, 8- or 16- bytes for
encryption [depending DES or AES], 1-byte Cisco DTLS Tunneling Protocol [CDTP]
header, 20-bytes MAC, 1-byte pad), we will get the size of unencrypted payload.
This will be communicated back
from ASA to AnyConnect client so that applications shouldn't cross this value
else fragmentation will be triggered
computed
tls-mtu=1219 dtls-mtu=1210 conf-mtu=1420
DTLS enabled
for intf=2 (CORP)
tls-mtu=1219
dtls-mtu=1210
Message Authentication Code (MAC)
A Message Authentication Code is a one-way hash computed from a message and some secret data. It is difficult to forge without knowing the secret data. Its purpose is to detect if the message has been altered.
A Message Authentication Code is a one-way hash computed from a message and some secret data. It is difficult to forge without knowing the secret data. Its purpose is to detect if the message has been altered.
This post is really an informative dear and I am very thankful that you shared it here with us. I also have some privacy concerns and need some suggestions on best vpn china services. Can you please share some good ideas for me?
ReplyDelete