• Apparati e reti
  • WireGuard/IPSec: massime prestazioni ottenibili con RouterOS e pfSense

Ciao a tutti, avrei (purtroppo) necessità di instradare tutto il traffico di una connettività attraverso una VPN.
Più precisamente, vorrei terminare la VPN su una VPS sul quale ho installato pfSense.
La connettività in questione è una classica 1000/500 in OpenStream su cluster A&B.
Documentandomi un po', ho reputato che WireGuard potesse essere la soluzione in grado di fornirmi le migliori prestazioni (accetto suggerimenti!)
Ho effettuato le prime prove utilizzando una RB450Gx4 (è sostanzialmente un hAP ac² senza WiFi ma con più RAM), ottenendo da Speedtest circa 300Mbps simmetrici. Non male, ma l'obiettivo sarebbe stato quello di raggiungere per quanto possibile il massimo delle prestazioni offerte dalla connettività in questione.

Ho provato quindi a replicare la configurazione su una RB4011, ottenendo intorno ai 500Mbps.
Avete stratagemmi da suggerirmi per incrementare ulteriormente le prestazioni senza cambiare router?

/interface wireguard
add listen-port=51827 mtu=1400 name=wireguard1

/interface wireguard peers
add allowed-address=0.0.0.0/0 endpoint-address=<RIMOSSO> endpoint-port=51827 interface=wireguard1 preshared-key=<RIMOSSO> public-key=<RIMOSSO>

/routing table
add disabled=no fib name=wg-fwcloud

/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu out-interface=wireguard1 passthrough=yes protocol=tcp tcp-flags=syn

/ip firewall nat
add action=masquerade chain=srcnat out-interface=wireguard1

/ip route
add dst-address=0.0.0.0/0 gateway=wireguard1 routing-table=wg-fwcloud

/routing rule
add action=lookup disabled=no src-address=192.168.2.0/24 table=wg-fwcloud

La connettività usa PPPoE e ho 1480 di MTU.

Oltretutto, noto una certa lentezza durante la semplice navigazione, mi viene da ipotizzare che io abbia sbagliato qualcosa (magari proprio lato MTU).

Nel caso vi servissero informazioni aggiuntive, non esitate a chiedermele 🙂

Grazie in anticipo.

    nxdrd

    Io proverei con un client Linux lato server.
    Inoltre, quando tempo fa' ho fatto una cosa simile, l'implementazione user space di Wireguard (Wireguard-go) batteva in performance quella in kernel space.

    Lo scenario era SRV Linux <--> SRV Linux

      nxdrd
      Dovresti verificare che non frammenti i pacchetti e nel caso ridurre MTU.

      Il RB4011 dovrebbe riuscire a farlo 1 Gb/s attraverso la VPN.

        nxdrd Avete stratagemmi da suggerirmi per incrementare ulteriormente le prestazioni senza cambiare router?

        Quanti core saturi nelle tue prove?

        • nxdrd ha risposto a questo messaggio

          nxdrd Io farei un tentativo con fasttrack attivo, ammesso che non ti servano le code.

          • nxdrd ha risposto a questo messaggio

            nxdrd Documentandomi un po', ho reputato che WireGuard potesse essere la soluzione in grado di fornirmi le migliori prestazioni (accetto suggerimenti!)

            Beh.. no.. le ipsec IKEv2 viaggiano di più... perchè spesso i processori hanno modo di accelerarle.

            nxdrd Ho provato quindi a replicare la configurazione su una RB4011, ottenendo intorno ai 500Mbps.
            Avete stratagemmi da suggerirmi per incrementare ulteriormente le prestazioni senza cambiare router?

            IPSEC Ikev2... l'RB4011 ha l'accelerazione hardware.
            In generale, con wireguard conta la frequenza del processore. Con il 5009 va un po' di più ma è un ARM64.

            Ti ripeto, sul 4011 l'unica per saturare la gigabit è una IPSEC... ike o ikev2.

            Tra l'altro per fare 1G su wireguard ti servono mikrotik molto costosi.

            wtf Il RB4011 dovrebbe riuscire a farlo 1 Gb/s attraverso la VPN.

            In wireguard?
            Nel caso se hai link guardo volentieri perchè li uso anche io.

            Se propro dei usare wireguard... devi comprarti un mini pc... uno di quelli "appliance"... N100, 2 ethernet e via... saturi la gigabit... eventualmente con routerOS sopra.

            • nxdrd e wtf hanno risposto a questo messaggio
            • nxdrd ha messo mi piace.

              Lorenzo1635 è una prova che effettivamente potrei fare, anche se leggendo i post più in basso mi sta venendo la tentazione di passar diretto alla IPSec.

              wtf domani cercherò di fare test più approfonditi a tal riguardo.

              mark129 in questo momento non ho modo di effettuare test, ricordo però che effettuando uno speedtest un core andasse quasi 100%, mentre gli altri intorno al 40%.

              Nino12 Purtroppo ho già provato ad abilitare il FastTrack, prima che inserissi la regola di mangle.

              Technetium No affatto, non sono obbligato a utilizzare WireGuard 🙂
              Diciamo che l'ho scelto con superficialità, in quanto mi era parso di capire che fosse in grado di offrire prestazioni sempre superiori alle IPSec (sbagliando).

              A questo punto mi sa che tornerò sulla IPSec, come mi era già capitato in passato di utilizzare.

              Vi terrò aggiornati, grazie 😇

                nxdrd in questo momento non ho modo di effettuare test, ricordo però che effettuando uno speedtest un core andasse quasi 100%, mentre gli altri intorno al 40%.

                Servirebbero i dati di ambo gli endpoint ma penso se ne possa ragionevolmente concludere che non hai offloading o acccelerazioni disponibili.
                Non trascurare wtf la scelta dello MTU é cruciale per le prestazioni ed i valori potrebbero essere ben diversi tra VPS e 'tik.
                Su github trovi uno script al proposito per wg: ci sarà sicuramente altro in giro ma per provare potrebbe andare.

                Sulla differenza di prestazioni tra wg e ipsec, YMMV: potrebbe pure essere di pochissimi punti percentuali.
                Con ipsec introduci pure differenti cripto e la combo cripto / mtu può variarti le prestazioni (per ambo gli endpoint).

                  mark129 Servirebbero i dati di ambo gli endpoint ma penso se ne possa ragionevolmente concludere che non hai offloading o acccelerazioni disponibili.

                  Attualmente credo che nessun processore abbia offloading per wireguard.
                  Infatti molti attori del mercato stanno aspettando da anni la scrittura di un modulo di wireguard (cosa possibile perchè è estendibile) che si basi su AES che è già accelerato dai processori attuali... però mi sa che i grandi attori non vogliono mettere in ombra i loro protocolli SSL/AES - tunnel proprietari 😄

                  Lorenzo1635
                  La limitazione è sicuramente dovuta al router che ha un processore che oltre non ce la fa. Mandi un core al 100%. Wireguard è single core e serve un processore con frequenza elevata. La VPS o un server qualsiasi in wireguard fanno molto di più.

                  nxdrd in questo momento non ho modo di effettuare test, ricordo però che effettuando uno speedtest un core andasse quasi 100%, mentre gli altri intorno al 40%.

                  Certo.. wireguard è fatto tutto su CPU. Il thread è singolo ma su tutti i dispositivi, anche sui pc.
                  L'RB4011 fa poco meno di 400Mbps... mentre il 5009 che ha il vantaggio di fare calcoli a 64 bit raggiunge i 700mbps.
                  Per saturare la gigabit servirebbe, in linea teorica, un processore da circa 2Ghz a 64bit. Sempre però da vedere poi in base a quante regole di firewall metti dopo.. etc..
                  Ti lascio andare a vedere cosa costa attualmente un mikrotik con processore a 2Ghz 😅

                  nxdrd A questo punto mi sa che tornerò sulla IPSec, come mi era già capitato in passato di utilizzare.

                  Con criptazione basata su AES che è accelerata su hardware saturi la connessione ~ 950mbps con ros7.

                    Technetium
                    Andavo a memoria, in realtà mi riferivo ai test in IPsec.

                      wtf
                      Quelli sono i risultati con Ros6. Con ros7 sono un pochino meno perchè l'os nel suo complesso "pesa" di più. E tieni conto che sono test fatti senza firewall.
                      In ogni caso, nel caso reale, una connessione gigabit più o meno la saturi 😉 (perchè i pacchetti non pesano tutti uguali)

                      wtf Il RB4011 dovrebbe riuscire a farlo 1 Gb/s attraverso la VPN.

                      Bisogna anche specificare quale 😄
                      Ipsec, se scegli algoritmi di criptazione con accelerazione, si. Se scegli algoritmi non accelerati, no.
                      Wiregurad, non ci arriva.
                      OpenVPN, non ci arriva.
                      SSTP, non ci arriva.

                      • wtf ha risposto a questo messaggio

                        Technetium Bisogna anche specificare quale

                        Certo, era buttata lì, nel senso che ci può arrivare, naturalmente poi dipende da altre n (con n grande a piacere) variabili ! 🙂

                        Ciao @nxdrd , se usi come router RB450Gx4 potresti provare GRE + IPsec, molto semplice l'implementazione.
                        WireGuard ho calcolato MTU di 1432 con IPv4 e PPPoE MTU 1492.

                        Avevo fatto alcuni test su hAP ac3 ed hEX, le prestazioni con entrambi i protocolli erano forse 1/5 della linea.
                        Potresti anche provare a sostituire new-mss=clamp-to-pmtu con
                        /ip firewall mangle add action=change-mss chain=forward new-mss=... in-interface="..." protocol=tcp tcp-flags=syn tcp-mss=...-6553 dovrebbe essere più leggero

                          ST_ Potresti anche provare a sostituire new-mss=clamp-to-pmtu con
                          /ip firewall mangle add action=change-mss chain=forward new-mss=... in-interface="..." protocol=tcp tcp-flags=syn tcp-mss=...-6553 dovrebbe essere più leggero

                          Però sono cose un po' diverse.
                          Con il primo, fa un path MTU discovery e poi imposta quella dimensione, e lo fa ad ogni riconnessione.
                          Con il secondo, sei tu che imponi la dimensione.

                          Se tu imponi la dimensione devi essere sicuro che venga rispettata. Sempre.

                          Io ho avuto problemi con linee Wind e Fastweb perchè a seconda dell'instradamento interno, l'MTU variava. Risultato, si frammentavano e quando avanzavano pochi bit, spesso andavano persi. Come se la rete interna dell'ISP scartasse i pacchettini per fare pulizia. Risultato: il link stallava... poi si riconnetteva.. poi stallava... un disastro.

                          Technetium

                          A dire il vero wireguard non è single core / single thread, quello è (era) openvpn...
                          Wireguard deve la sua estrema velocità proprio all'essere multithread.
                          Per saturare 1gb con wireguard basta un banale processore filogic della mediatek (gli.inet mt6000, Netgear wax220, Zyxel nwa50ax pro e simili, roba da 100/160 euro max).
                          Con mikrotik non ce la fai perché in alcuni casi monta processori vecchiotti e ti fa pagare caro routeros, in altri monta processori nuovi ma è limitata da Routeros (sembra strano ma è purtroppo così)

                            Qualche benchmark dal sito wireguard.

                            • mark129 ha risposto a questo messaggio

                              wtf Qualche benchmark dal sito wireguard.

                              IkeV2?

                              documibozu Zyxel nwa50ax pro

                              È un access point...

                              documibozu Netgear wax220

                              È un access point

                              documibozu gli.inet mt6000

                              Fa 900mbps con wireguard... e non so se ti sei accorto del fatto che monta un processore a 64 bit che arriva 2Ghz. E anche con routeros e pari processore, saturi la gigabit con wireguard. L'ho scritto sopra.

                              Mandami una schermata del gli.inet mt6000 per vedere se a 900mbs di wireguard satura un core o per che motivo non va oltre.

                              documibozu A dire il vero wireguard non è single core / single thread, quello è (era) openvpn...

                              Ovunque dicono che la limitante è più la frequenza del processore.
                              In ogni caso su routeros, ma anche anche su altri se mandi il tunnel wireguard a saturazione, finisce per saturare un core (prova su un linux con processore multicore..).
                              Fai una ricerca e vedrai che ci sono molti riferimenti al fatto che wireguard tende a saturare un core e dopo di che a limitarsi. Infatti ci sono degli studi per cercare di evitare questo.
                              Ed è uno dei motivi per cui non viene adottato su vasta scala in ambiti high-performace.
                              Questi, stanno sprecando il loro tempo ?
                              https://netdevconf.info/0x18/sessions/talk/achieving-linear-cpu-scaling-in-wireguard-with-an-efficient-multi-tunnel-architecture.html

                              O fai un giro su reddit / Wireguard e vedi che è un problema continuamente riportato.

                              In particolare dovrebbe essere il processo che fa il fowarding dei pacchetti sull'interfaccia a mandare in saturazione il core. Purtroppo va fatto in ordine ed è difficile farlo in multicore.

                              documibozu Con mikrotik non ce la fai perché in alcuni casi monta processori vecchiotti e ti fa pagare caro routeros, in altri monta processori nuovi ma è limitata da Routeros (sembra strano ma è purtroppo così)

                              Può essere una visione... ma è il vantaggio di essere programmabili che ha un peso.
                              Comunque il flint 2 non fa di meglio a parità di processore.

                                Technetium

                                Wax e nwa50ax sono access point certo, ma li puoi utilizzare agevolmente come roas, hanno un'interfaccia a 2.5gbps che ti lascia banda a sufficienza per reggere wireguard a 900mb.
                                Il flint2 non fa meglio, il problema è che fa uguale in inferiorità di costi.

                                  documibozu Il flint2 non fa meglio, il problema è che fa uguale in inferiorità di costi.

                                  C passano 20 euro.
                                  Di contro il flint non fa cose che con ros puoi fare e viceversa. Dipende cosa serve.

                                  documibozu Wax e nwa50ax sono access point certo, ma li puoi utilizzare agevolmente come roas, hanno un'interfaccia a 2.5gbps

                                  Sarei abbastanza stupito se fa 900mbps... ha un processore dual core, 1300Mhz a 64bit.

                                    Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
                                    P.I. IT16712091004 - info@fibraclick.it

                                    ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile