Am o montură NFS peste un tunel Strongswan IPSec, care este încapsulat într-un tunel 6to4. IPSec este pentru că am nevoie de criptare pentru traficul NFS, 6to4 este pentru că furnizorul VPS nu va atribui un prefix IPv6 nativ serverului meu. Deoarece am avut probleme cu MTU cu tunelul 6to4, a trebuit să scad MTU pe interfața tunelului la minim (1280 â dacă încerc să setez ceva mai mic, primesc mesajul „Eroare: mtu mai puțin decât minimul dispozitivului.” ).
NFS încă vrea să trimită pachete prin MTU. Știu asta, pentru că am o regulă nftables pentru a înregistra pachetele ESP:
ieșire în lanț {
tip filtru cârlig ieșire filtru prioritar; acceptarea politicii;
ip6 nexthdr esp contor pachete 303367 octeți 323173696 jurnal accept
}
Astfel, văd aceste pachete conectate în syslog/journal:
29 ianuarie 21:41:18 kernel nfsclient: IN= OUT=he-ipv6 SRC=fd48:2b50:6a95:a6db:0000:0000:0000:0004 DST=fdc8:d5f9:cbbf:b2006:00:00:006:00 2001 LEN=1316 TC=0 HOPLIMIT=64 FLOWLBL=155038
(IP-urile sunt schimbate în private din motive de confidențialitate.)
Acum nu pot vedea pachetul logat cu tcpdump
pentru că se presupune că sunt abandonați de nucleu din cauza faptului că sunt peste MTU.Presupun că NFS încearcă să adere la setarea MTU, dar nu știe că pachetele sale vor fi încapsulate în IPSec. Deci, chiar dacă NFS generează un pachet sub 1280 de octeți, antetul ESP adăugat la acesta îl trece peste MTU setat. De asemenea, bănuiesc că NFS setează steag-ul DF pe pachetele sale, pentru că altfel ar funcționa fragmentarea. (L-am testat cu ping6 -M vreau
și pachetele fragmentate au trecut.) Deci nu pot reduce MTU, NFS insistă să trimită pachete care vor fi peste MTU atunci când sunt criptate și chiar setează steag-ul DF.
Ce pot face acum? M-am gândit la următoarele lucruri, dar nu știu cum să le implementez:
- Setați o dimensiune maximă a pachetului pentru NFS, de ex. cu opțiune de montare, dar nu cred că există o astfel de setare, deja am căutat-o.
- Configurați Strongswan pentru a face față situației, dar nici eu nu am găsit o astfel de opțiune.
- Setați o regulă nftables care anunță cumva NFS că ar trebui să genereze pachete mai mici. De exemplu. raportați un MTU și mai mic pentru NFS atunci când îl caută â nu știu dacă este chiar posibil.
- Eliminați steag-ul DF din pachete pentru a forța fragmentarea. Nici eu nu știu cum să o fac sau dacă se poate.
Cred că nftables este calea de urmat, dar dacă ar putea fi rezolvată la nivel NFS, ar fi și mai bine. De asemenea, aș aprecia soluții cu iptables, aș putea căuta care este echivalentul nftables.
Pentru că se cere în comentarii, ofer informații despre interfețele mele.
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stare UP mod DEFAULT grup implicit qlen 1000
link/ether aa:00:11:4d:f7:01 brd ff:ff:ff:ff:ff:ff
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state Mod NECUNOSCUT DEFAULT grup implicit qlen 1000
link/sit 192.168.32.84 peer 216.66.84.42
Și aici sunt tunelurile (tunel ip
):
sit0: ipv6/ip la distanță orice local orice ttl 64 nopmtudisc 6rd-prefix 2002::/16
he-ipv6: ipv6/ip la distanță 216.66.84.42 local 192.168.32.84 ttl 255 al 6-lea prefix 2002::/16
(Mi-am schimbat IPv4 public într-o adresă privată, dar în realitate am o adresă rutabilă la nivel global pentru local
; 216.66.84.42 este poarta de intrare a tunelului HE 6to4, care este binecunoscută, așa că a fost lăsată aici.)
Și iată ruta implicită care se aplică pentru trafic:
implicit prin fd48:2b50:6a95:a6db::1 dev he-ipv6 metric 1024 onlink pref mediu
Așadar, aplicațiile cred că pachetele lor vor merge mai departe el-ipv6
, care are un MTU de 1280. Dar pachetele lor sunt mai întâi încapsulate în IPSec ESP și apoi trimise prin el-ipv6
tunel. Rezultatul este un pachet de date NFS criptat IPSec, încapsulat într-un pachet 6-4, care însuși iese pe eth0
interfață către 216.66.84.42 (gateway HE).