пересылаемый TCP-трафик рефрагментируется в Linux, несмотря на флаг «Не фрагментировать»
У нас есть 2 VPN-сервера на одном хостере. Серверы виртуальные и имеют разные дистрибутивы Linux. Клиенты VPN устанавливают https-соединения с одним и тем же сервером Amazon EC2. В TCP-пакетах EC2 всегда установлен флаг «Не фрагментировать».
Хотя MTU как на физическом интерфейсе, так и на интерфейсе Tun обоих VPN-серверов равен 1500, они обычно получают пакеты большего размера от EC2. Я не уверен, как это возможно, но, возможно, это как-то связано с Virtio.
В любом случае, когда TCP-трафик перенаправляется на интерфейсы Tun, серверы ведут себя по-разному:
- На «сервере 1» большие пакеты отбрасываются, как и ожидалось, и ICMP «Необходима фрагментация» отправляется обратно в EC2.
- На «сервере 2» TCP-трафик рефрагментируется, но это не IP-фрагментация, а совершенно новый TCP-поток, как если бы на VPN-сервере было приложение с двумя сокетами. Флаг DF сохраняется.
Поэтому я предполагаю, что есть некоторыеsysctl
настройка, которая включает такое поведение на «сервере 2». Я прав? Где эта настройка?
Я настроил переадресацию на сервере 2 исключительно с помощьюfirewall-cmd
Вот конфигурация брандмауэра:
external (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources: 10.8.0.0/24 10.8.1.0/24
services: dhcpv6-client http https irc ircs openvpn smtp ssh
ports: 1398/tcp 1194/tcp 1401/tcp 1402/tcp 65213/tcp 500/udp 501/udp
protocols:
forward: yes
masquerade: yes
forward-ports:
port=1500:proto=tcp:toport=1500:toaddr=10.8.1.32
port=1501:proto=tcp:toport=1501:toaddr=10.8.1.32
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.8.1.0/24" port port="3128" protocol="tcp" accept
вывод ethtool
localhost:~ # ethtool -k eth0
Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: on
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: on [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-tunnel-remcsum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]
tx-gso-list: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
rx-gro-hw: on
tls-hw-record: off [fixed]
rx-gro-list: off
macsec-hw-offload: off [fixed]
rx-udp-gro-forwarding: off
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]
localhost:~ #```