Hogyan maximalizáltam a nem gigabites internetkapcsolatom sebességét

Tippek az Ookla mérnökétől

A nevem Brennen Smith, és az Ookla Speedtest vezető rendszermérnökeként a szerverek és az internetes infrastruktúra birkózásával töltem az időmet. Napi céljaim a felhasználók millióit támogató, nagy teljesítményű alkalmazások tervezésétől és a világ leggyorsabb internetkapcsolatainak tesztelésétől a mikroszekundumok kisajtolásáig terjednek – tehát otthon arra törekszem, hogy a személyes internetes teljesítményem a lehető leggyorsabban működjön .

Olyan területen élek, ahol egy DOCSIS internetszolgáltató nem nyújt szimmetrikus gigabites internetet – a letöltési és feltöltési sebességem nem egyenlő. Ehelyett aszimmetrikus tervem van, 200 Mbps letöltéssel és 10 Mbps feltöltéssel – ez az árnyalat jelentősen befolyásolta a hálózat tervezésemet, mert az aszimmetrikus szolgáltatás könnyebben vezethet puffadáshoz.

A bufferbloat-ról egy későbbi cikkben foglalkozunk, de dióhéjban ez egy olyan kérdés, amely akkor merül fel, amikor egy upstream hálózati eszköz pufferei telítettek egy feltöltés során. Ez óriási hálózati torlódást, a késleltetést 2000 ms fölé emelkedik, és általában rossz minőségű internetet okoz. A megoldás az, hogy a kimenő forgalmat olyan sebességre formáljuk, amely éppen az upstream eszköz küldési maximuma alatt van, így pufferei nem töltődnek fel. Az internetszolgáltatóm arról híres, hogy a gyenge feltöltési teljesítmény miatt bufferbloat problémák vannak, és még az általuk biztosított routereken is elterjedt probléma.

Ennek eredményeként szükségem volt a 200 Mbps sebesség feletti forgalom alakítására – ez megakadályozta, hogy MIPS vagy ARM alapú útválasztókat használjak, mivel nincs CPU-lóerőjük ahhoz, hogy ~ 150 Mbps sebességet továbbítsanak hardverterhelés nélkül (I akkoriban egy Asus AC68U-n használta a paradicsomot). Nagyon kevés útválasztó biztosítja a forgalom egyetlen irányának alakítását a szoftverben, ezért olyan megoldást kellett találnom, amely képes kezelni a kétirányú formázást 200 Mbps felett. Míg az Ookla Engineering csapata közül sokan használják az Ubiquiti Edge Router-eket, CPU-juk a forgalom alakításának teljesítményét a következőkre korlátozza:

A szerkesztő megjegyzése: Mivel ez a cikk megjelent, a legújabb firmware-eken mostantól lehetőség van forgalomalakításra egyetlen irányban az EdgeRouter platformon.

Követelmények

Így az útválasztóra vonatkozó követelményeim a következők voltak:

Megfogtam ezt a kis x86–64 szervert, és 4 GB Kingston DDR3L-rel és 32 GB-os Adata SSD-vel kombináltam. Ennek a szervernek a legfontosabb pontjai a kevesebb, de magasabb frekvenciájú magok és a 4xGBE Intel NIC-k. Az Intel NIC-ok a legjobb támogatást nyújtják a nyílt forráskódú világban, és nagyon ajánlott távol maradni az olcsóbb vállalatoktól. Ez a gép nem rendelkezik AES-NI vagy Intel Quickassist szolgáltatással, de a VPN-ek vonalsebességű titkosításával / visszafejtésével sem voltak problémái.

A tényleges útválasztás

Az összeszerelés után telepítettem a PFSense 2.3-at a tényleges útválasztás kezelésére. Azok számára, akik még nem használták a PFSense-t, ez egy hihetetlen útválasztó operációs rendszer, amely a FreeBSD-n alapul. Könnyen megfelelt a fenti követelményeknek, és jelentősen felülmúlta azokat. Alkalmazhattam a CodelQ AQM-alakítást a kimenő forgalomra, hogy megakadályozzam a puffadást, valamint az ISP által biztosított IPv6 / 60-at / 64-esekre osztottam a 3 VLAN-omhoz.

Kutatásom és tesztelésem során értékeltem az IPCop, a VyOS, az OPNSense, a Sophos UTM, a RouterOS, az OpenWRT x86 és az Alpine Linux programokat is, amelyek alap operációs rendszerként szolgálnak, de egyik sem volt olyan támogatott és teljes körű, mint a PFSense. A PFSense legközelebbi versenyzője a VyOS volt, mivel szeretem a deklaratív CLI kezelőfelületet, és csak az elsődleges / biztonsági partíciós rendszereket olvasom, de néhány ok miatt nem tudtam használni:

A PFSense nem problémamentes, de tökéletes a felhasználási esetemhez. A legnagyobb problémám az alapértelmezett DNS-konfiguráció volt. A PFSense-en a DNS-kiszolgáló ( nincs kötve ) úgy van beállítva, hogy továbbító szerverként rekurzív felbontóként működjön. Bár ennek lehet biztonsági előnye szélső esetekben, a keresések teljesítményének hatása jelentős – az internetes böngészés rángatózó volt, mivel a tartományra osztott eszközök lassú keresést végeztek.

QoS-beállítások

Néhány ember megkérdezte, hogy milyen QoS-beállításokat használok a PFSense-ben. Kerültem az alapértelmezett varázsló QoS beállításait, mert általában megpróbálom elkerülni a proto / port osztályozást. A modern web forgalmának túlnyomó része a TCP 80/443, az UDP 53-as csöppségével, így a HSFC osztályú QoS nem olyan hatékony, mint korábban. Azonban minden eset más és más, ezért szívesen hallanék a szabály beállításairól.

Lényegében utánoztam az FQ-CODEL-t azzal, hogy egy FAIRQ ütemezőt elhelyeztem egy CODELQ-sor előtt. A CODEL képes az adatfolyamok fontossági sorrendbe állítására és a csomagok eldobására, ha visszalépésre van szükség, ezért nagy hatékonyságú volt magas versenyszámú forgatókönyvek esetén. A nagyon kíváncsiskodók számára íme a QoS fa ábrázolása, amelyet a PFSense-ben állítottam be:

Miért 12 531 Kbps?

A kinti sasszemek számára – miért alakítottam a feltöltési sebességemet 12 531 Kbps-re, amikor a kapcsolatom 10 Mbps-os feletti?

A válasz kettős. Először is, a DOCSIS-kapcsolatokat gyakran túlkínálják annak biztosítása érdekében, hogy a felhasználók még a kábel / modem elvesztése esetén is valószínűleg elérjék a fizetett sebességet. Tehát a Speedtest futtatása a 10 Mbps-os kapcsolatomon alakítás nélkül ~ 13 Mbps-t eredményezett. Meg kellett azonban találnom azt a pontot, amely maximalizálja a feltöltési sebességet, miközben nem töltem fel az upstream eszköz puffereit.

Ennek megtalálásához sok oktatóanyag azt ajánlja, hogy „ vegyen be egy Speedtestet, majd vonjon le 20% -ot ” – azt állítom, hogy ez helytelen, mivel egy átfogó százalék túl sok vagy kevés lehet. Az optimális pont megtalálásához – lényegében a következő álkódot csináltam:

Ez könnyen megtehető kézzel, és körülbelül 5 percet igényel a beállítás. Így 12 531 Kb / s sebességgel számoltam a lehető legnagyobb feltöltési sebességgel, anélkül, hogy hatással lennék a szolgáltatásomra.

Terjesztés kliens eszközökre

Az útválasztó ezután egy HP Procurve 1810G kapcsolóhoz vezet, amely a címkézett VLAN forgalmat továbbítja a házban elterülő három Ubiquiti UniFi AC Pro AP-nek. A címkézetlen forgalom ezután más ethernet alapú eszközökhöz kerül.

A PFSense remek felügyeleti eszközökkel rendelkezik a kapcsolat állapotának és minőségének mérésére, de szerettem volna nyomon követni a kapcsolat sebességét. Készítettem egy kis Speedlogger nevű Node and React alkalmazást, amely 8 óránként készít egy Speedtestet, és szép grafikonon ábrázolja.

Megérte?

Teljesen.

Mint minden kísérletnél, a következtetéseket is adatokkal kell alátámasztani. Annak ellenőrzéséhez, hogy a hálózat zökkenőmentesen működött-e nagy terhelés mellett, elvégeztem a következő kísérletet:

Amint az alábbi ábrán látható, QoS nélkül, a kapcsolatom késleltetése ~ 1 235% -kal nőtt. A QoS engedélyezésével azonban a kapcsolat stabil maradt a feltöltés során, és nem tudtam statisztikailag szignifikáns delta értéket meghatározni.

Így maximalizáltam a nem gigabites internetkapcsolatom sebességét. Mit tett a hálózatával?

Ha a cikk végére értél, akkor valószínűleg elég ügyes vagy, mint mi. Szakképzett mérnököket és fejlesztőket keresünk – ha ez jó úton van, nézze meg a következő üzeneteinket: Működőképes.