[BSD] bsd as a router

PÁSZTOR György pasztor at linux.gyakg.u-szeged.hu
2017. Aug. 29., K, 23:41:48 CEST


Üdv,

Nemrégiben megfordult a fejemben, hogy kicsit tágítanám az ismereteimet PF
téren, mivel eddig még csak a netfilter/iptables párost ismerem.
Ennek keretében el is kezdtem egy játszós rendszert virtualizálva
összerakni itthon.

Ami viszont a problémám, hogy ha FreeBSD11.0-Release vagy 11.1-et próbálok
használni (ezeket próbáltam BSD-ből még csak) Xen 4.8-as virtualizáció
mellett, akkor egyszerűen nem működik. A ping-eg átmennek, de azon túl már
nem sok minden. A jelenség érdekes, mert a tcpdump-ban pl. látom a syn-es
csomagot megjelenni a túloldalon, de az alkalmazásig már nem jut el.
Ugyanez udp-vel. Figyelhetek netcat-el, de ha a Xen/FreeBSD-s routeren
keresztül megy, akkor ott valami megmukorodik.
Eddig a tapasztalat.

A hipotézis:
Arra tippelnék, hogy valamilyen offload engine vagy checksum-számolás
kavar be valahol. Mi más okozná azt, hogy app-ig már nem ér fel a csomag?

Csak hogy leszűkítsem a probléma reprodukciót, ha ebből a fenti
konstellációból bármit változtatok a rendszerben, akkor működik.
Konkrétan a következő működő konfigokat sikerült összerakjam:
- A bsd helyett egy debian-t állítottam be csomagtovábbításra. Minden más
  ugyanaz. -> Működik. IP megy oda-vissza rendben.
- Kipróbáltam ugyanezt a felállást (freebsd router, mögötte egy frissen
  húzott debian kliens szerepben) úgy, hogy az asztali gépemre
  telepítettem virtualbox-ba a freebsd-t és ott tettem mögé a másik
  ("belső hálózat") alhálózaton a másik virtu gépet.
  IP címek, routeing, minden pont  ugyanúgy konfigurálva.
  -> Működik. IP megy oda-vissza rendben.
- A Xen-be egy Opnsense 17.7-t telepítettem a FreeBSD helyett, majd a pf
  funkciókat kikapcsoltam (mert először a routeing-ot akartam biztosra
  tudni, hogy működik). -> Meglepő, de működik! dmesg szerint FreeBSD11.0
  az alapja.
  Sőtt megnéztem a kattogtatós felületen: ott még az offload engine-k is
  engedélyezve voltak: sg, tso, meg még valami. Talán tx?

Amit még nem próbáltam és _talán_ érdekes lehet: korábbi xen verzióval
ugyanezt kipróbálni. Ami miatt ez még eszembe jut: 4.6-os Xen körül valami
változott a xen-netfront driver területen. Pontosan még nem tudom mi, csak
egy oroszlánfogásos tapasztalat. A xen dom0-nak alpine linuxot használtam,
mert pici, nem kér enni-inni, és pikk-pakk ki lehet próbálni egy másik
verzióval is, hogy működnének-e ugyanazok a virtuális gépek. (Virtu gépek
diszkjei egyelőre nfs-en tartom.)
Az oroszlánfogáshoz a tesztem OmniOS r151022 volt a domU. Ahogy a xen
netfront drivert kezdte volna használni, dump-olt egyet, majd reboot. Ezt
tudta a végtelenségig csinálni. Ugyanezt produkálta r151014-el, 151dev9-es
openindianaval, friss hipster openindianaval.
Végül elkezdtem a Xen verziót cserélgetni kívül, azáltal hogy több
különböző alpine linux verziót is kipróbáltam hipervisorként.
Az alpine verziókra már csak halványan emlékszem, de talán a 3.3-al még jó
volt, a 3.4-es verzióktól kezdve már crash-elt az illumos kernel netfront
drivere. Ami a xen 4.6-os verziót jelenti. Persze az alpine-nál rosszul is
emlékezhetek és akkor a 3.2 volt az utolsó jó verzió és 3.3-tól crash-el.
Egyelőre ez csak hipotézis, hogy _talán_ összefügghet a xen netfront
driverrel is.

Próbáltam volna a hálózatot is virtualizálva pci-passthrough-val, de
eléggé megnehezíti a dolgot, hogy mintha valami bug lenne az igbvf
driverrel is. Legalábbis feltételezem, hogy avval: Amint a host lábra áll,
és először indítom el a bsd-s domU-t, akkor még jól működik a igbvf
meghajtotta kárta. Ha a domU-t szabályosan leállítom, majd újra
xl create bsdr, akkor az igbvf-es interfészen meg se mukkan.
Ami meg másik port van az alaplapon az valami annyra új intel chipset, hogy
annak ixgbevf driver kellene, de az meg sehogy nem tudja meghajtani azt
vf-et. Ott próbáltam olyat is, hogy a komplett kártyát passthrough-zom a
pci-on és nem csak egy vf-et, de #1 úgy se ismerte, #2 trükközni kell, mert
ha már előre beírom a xen konfigfájlba, akkor a xen-es seabios megáll, hogy
nem ér el valamilyen pci regisztert és ezen a ponton végleg megáll a virtgép
a bios-nál.
De ha megvárom még elér a boot managerig, és akkor tolom be neki
xl pci-attach -al a kártyát, akkor képes megenni. Csak meghajtani nem.
Valószínűleg túl új chipset. (Supermicro X10SDV-6C+-TLN4F) de ez ebben a
verzióban elég idegörlő, és a igbvf-hez hasonlóan, ha a bsd-s domU-t
rebootolni akarom, akkor a komplett host-ot is rebootolni kell, és mire a
supermicro összeszedi magát, az egy kis idő.
(Egyelőre legacy boot-olok, uefi nincs belőve)

Aki bármelyik részen hasznos tanáccsal vagy ötlettel rendelkezik, hogy mit
nézzek meg, azt nagyon szívesen veszem!

Üdv,
Gyu


További információk a(z) BSD levelezőlistáról