Linux mini-howto: Postfix MTU lost connection

postfix-mtu-problem-papirnet-blog_header_2017

Linux mini-howto? Krátce o nástrojích ze života sysadmina.

Postfix MTU a lost connection after …

Podivné chování poštovního serveru Postfix nemusí být nutně způsobené chybnou konfigurací služby samotné, problémy s velikostí MTU jsou o to zákeřnější díky své relativně skryté povaze a “chaotickému” chování, na problém s doručování pošty ve vztahu k MTU jsme nedávno narazili u zákazníka a proto tento mikro-post, ať to neztratíme a třeba to i pomůže někomu dalšímu.

Co je to MTU ?

Maximum transmission unit (MTUmaximální přenosová jednotka) je v informatice označení pro maximální velikosti IP datagramu, který je možné vyslat daným síťovým rozhraním. Obvyklá hodnota MTU je 1500 bajtů, což je standardní MTU pro široce rozšířený Ethernet. (citace zdroj wikipedia)

Problém s doručovaním pošty

Konfiguračně vypadalo vše v pořádku, přesto některé mail servery nedokázaly doručovat poštu pro zákaznické domény, zejména problém byl se SMTP servery seznam.cz, ale i další např. zoho.com, Google SMTP (gmail) naopak chodil naprosto bez problému.

V logu Postfix serveru bylo možné najít tyto informace.

Nov 23 11:46:39 mailserver postfix/smtpd[15776]: lost connection after STARTTLS from mxb1.seznam.cz[77.75.78.89]
Nov 23 11:46:39 mailserver postfix/smtpd[15776]: disconnect from mxb1.seznam.cz[77.75.78.89]

Nebo tato varianta.
mailserver postfix/smtpd[15805]: timeout after DATA from ...

Pod delším zkoumání bylo zjištěno, že maximální velikost IP datagramu, který je internetová linka u zákazníka schopna zpracovat je 1464+28(hlavička)=1492 bytů, standardní hodnota je 1500 bytů.

1464+28:
root@lab1 ~ $ ping -M do -s 1464 a.b.c.d
PING a.b.c.d (a.b.c.d) 1464(1492) bytes of data.
1472 bytes from a.b.c.d: icmp_req=1 ttl=51 time=20.6 ms
1472 bytes from a.b.c.d: icmp_req=2 ttl=51 time=19.8 ms

1465+28:
root@lab1 ~ $ ping -M do -s 1465 a.b.c.d
PING a.b.c.d (a.b.c.d) 1465(1493) bytes of data.
ping: local error: Message too long, mtu=1492
ping: local error: Message too long, mtu=1492

Kam s ním(datagramem) a jak z toho ven ?

ideálním světě nahlásíte problém s velikosti MTU svému internetového poskytovateli (ISP), ten to obratem vyřeší, bohužel je to idealistická představa a menší ISP “tuší”, že něco jako MTU existuje a zde to také většinou končí, takže nahlásit problém, urgovat a urgovat a do vyřešení problému si pomoci sám, zajímavé je, že např. pro http provoz menší MTU vůbec nebyl problém, u DNS to ani nepřekvapuje, drtivá vetšina odpovědí se velikostí dostane do 512 bytů.

Co pomohlo ?

  • Vypnout TCP window scaling.
    sysctl -w net.ipv4.tcp_window_scaling=0
  • Zmenšit velikost MTU na uplink rozhraní serveru na 1400 bytů.
    ip link set eth0 mtu 1400

A následně restartovat službu Postfix serveru, po úpravě se doručování email rozběhlo zcela bez problémů, problém na lince s MTU zůstáva, ale díky vynucení menšího MTU už s tím počítají obě strany komunikace, zbývá “pouze” vyřešit problém s ISP a jeho službou a to bude jedna přestupná doba ledová.  ;-).

Užívejte moudře, díky za pozornost.
Exirta s.r.o.