Fibre

Ça y est, la fibre est arrivée ! Enfin depuis juillet. On passe d’environ 25Mbps à 300 puis 400Mbps depuis quelques jours avec l’offre actuelle de mon fournisseur d’accès à internet. La première chose à changer pour en profiter est donc de passer de bornes wifi 802.11n à 150Mbps (avec un lien montant en 100Mbps…) avec des répéteurs à du wifi 6 maillé à 3000Mbps, les prix pouvant atteindre des montants astronomiques pour des technologies plus récentes. J’ai donc opté pour un kit de 3 stations Mercusys H80X après avoir lu les bons avis sur les débits et le prix contenu que j’ai complété avec un autre kit H3000X payé un poil moins cher. Je ne sais pas quelle est la différence entre les deux à part que le premier n’est vendu que par trois alors que l’autre l’est à l’unité, par deux ou trois mais les caractéristiques techniques sont identiques.

Il faut être à côté de la borne principale, celle qui est connectée au lien montant, pour profiter du meilleur débit. Avec un lien montant à 1Gbps, j’arrive presque à saturation mais il faudrait donc une carte 2,5Gbps au moins pour tirer parti de l’entièreté des capacités du wifi. Évidemment, ça dépend aussi de la distance et les débits sont divisés par deux quand on est connecté à une autre borne. Ce sont surtout les enfants qui sont contents avec une meilleure latence.

Par contre, la VM KVM openbsd qui me servait de routeur affiche des débits lamentables qui ne dépassent pas 20Mbps, ce qui suffisait avec une liaison VDSL. Je crois que c’est lié aux pilotes virtio.

Pour illustrer ça, voici le résultat d’un test iperf3 vers internet :

router# iperf3 -c iperf.online.net
Connecting to host iperf.online.net, port 5201
[  4] local 192.168.1.14 port 30484 connected to 51.158.1.21 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  4]   0.00-1.01   sec   256 KBytes  2.08 Mbits/sec    0   11.7 KBytes
[  4]   1.01-2.01   sec   256 KBytes  2.10 Mbits/sec    0   12.3 KBytes
[  4]   2.01-3.01   sec   384 KBytes  3.15 Mbits/sec    0   14.1 KBytes
[  4]   3.01-4.01   sec   256 KBytes  2.10 Mbits/sec    0   8.85 KBytes
[  4]   4.01-5.01   sec   384 KBytes  3.15 Mbits/sec    0   12.0 KBytes
[  4]   5.01-6.01   sec   256 KBytes  2.10 Mbits/sec    0   5.66 KBytes
[  4]   6.01-7.01   sec   384 KBytes  3.15 Mbits/sec    0   9.51 KBytes
[  4]   7.01-8.01   sec   256 KBytes  2.10 Mbits/sec    0   11.3 KBytes
[  4]   8.01-9.01   sec   256 KBytes  2.10 Mbits/sec    0   7.62 KBytes
[  4]   9.01-10.01  sec   256 KBytes  2.09 Mbits/sec    0   8.38 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  4]   0.00-10.01  sec  2.88 MBytes  2.41 Mbits/sec    0             sender
[  4]   0.00-10.38  sec  2.91 MBytes  2.35 Mbits/sec                  receiver

iperf Done.

C’est quand même assez mauvais depuis la VM elle-même mais étrangement c’était quand même meilleur depuis une autre machine du réseau.

Un autre test vers une machine sur le lan donne des résultats un peu meilleurs mais c’est pas non plus foufou :

router# iperf3 -c iperf.lan
Connecting to host iperf.lan, port 5201
[  4] local 192.168.0.1 port 38939 connected to 192.168.0.172 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  4]   0.00-1.02   sec  2.25 MBytes  18.5 Mbits/sec    0   42.1 KBytes
[  4]   1.02-2.02   sec  1.88 MBytes  15.7 Mbits/sec    0   31.8 KBytes
[  4]   2.02-3.01   sec  1.75 MBytes  14.9 Mbits/sec    0   25.2 KBytes
[  4]   3.01-4.02   sec  2.12 MBytes  17.6 Mbits/sec    0   38.9 KBytes
[  4]   4.02-5.01   sec  1.75 MBytes  14.8 Mbits/sec    0   35.0 KBytes
[  4]   5.01-6.01   sec  1.75 MBytes  14.6 Mbits/sec    0   34.7 KBytes
[  4]   6.01-7.01   sec  1.25 MBytes  10.5 Mbits/sec    0   25.4 KBytes
[  4]   7.01-8.01   sec  2.12 MBytes  17.8 Mbits/sec    0   32.1 KBytes
[  4]   8.01-9.01   sec  2.12 MBytes  17.8 Mbits/sec    0   26.8 KBytes
[  4]   9.01-10.01  sec  2.12 MBytes  17.8 Mbits/sec    0   32.1 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  4]   0.00-10.01  sec  19.1 MBytes  16.0 Mbits/sec    0             sender
[  4]   0.00-20.03  sec  19.2 MBytes  8.02 Mbits/sec                  receiver

iperf Done.

Si on fait le test avec une VM KVM sous Linux, on a quand même de meilleurs résultats :

root@f77f0d5c-9756-4d22-96c1-eecddb41d748:~# iperf3 -c iperf.online.net
Connecting to host iperf.online.net, port 5201
[  5] local 192.168.0.191 port 49566 connected to 51.158.1.21 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.01   sec  20.6 MBytes   172 Mbits/sec    0    655 KBytes
[  5]   1.01-2.01   sec  20.8 MBytes   174 Mbits/sec    0    757 KBytes
[  5]   2.01-3.00   sec  21.2 MBytes   180 Mbits/sec    0    840 KBytes
[  5]   3.00-4.00   sec  22.2 MBytes   186 Mbits/sec    0    953 KBytes
[  5]   4.00-5.00   sec  20.9 MBytes   175 Mbits/sec    0    953 KBytes
[  5]   5.00-6.09   sec  17.4 MBytes   134 Mbits/sec    0    953 KBytes
[  5]   6.09-7.00   sec  3.46 MBytes  31.8 Mbits/sec    0    953 KBytes
[  5]   7.00-8.01   sec  5.79 MBytes  48.2 Mbits/sec    1   1003 KBytes
[  5]   8.01-9.00   sec  16.9 MBytes   143 Mbits/sec    0   1.04 MBytes
[  5]   9.00-10.00  sec  16.6 MBytes   139 Mbits/sec    0   1.04 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   166 MBytes   139 Mbits/sec    1             sender
[  5]   0.00-10.11  sec   163 MBytes   136 Mbits/sec                  receiver

iperf Done.

Et c’est encore mieux avec une VM bhyve sour Linux :

root@4c5b11bb-a425-4b10-8a0b-ff156a834052:~# iperf3 -c iperf.online.net
Connecting to host iperf.online.net, port 5201
[  5] local 192.168.0.170 port 43948 connected to 51.158.1.21 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  15.2 MBytes   127 Mbits/sec    0    742 KBytes
[  5]   1.00-2.02   sec  40.9 MBytes   337 Mbits/sec    0   1.51 MBytes
[  5]   2.02-3.00   sec  42.5 MBytes   363 Mbits/sec    0   1.51 MBytes
[  5]   3.00-4.02   sec  42.4 MBytes   349 Mbits/sec    0   1.60 MBytes
[  5]   4.02-5.02   sec  35.6 MBytes   299 Mbits/sec    0   1.70 MBytes
[  5]   5.02-6.01   sec  39.6 MBytes   335 Mbits/sec    0   1.70 MBytes
[  5]   6.01-7.00   sec  32.1 MBytes   272 Mbits/sec    0   1.70 MBytes
[  5]   7.00-8.03   sec  13.6 MBytes   110 Mbits/sec    0   1.79 MBytes
[  5]   8.03-9.00   sec  32.5 MBytes   282 Mbits/sec    0   1.88 MBytes
[  5]   9.00-10.00  sec  34.5 MBytes   289 Mbits/sec    0   1.99 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   329 MBytes   276 Mbits/sec    0             sender
[  5]   0.00-10.08  sec   329 MBytes   274 Mbits/sec                  receiver

iperf Done.

J’ai donc créé une nouvelle zone OS pour assurer les mêmes fonctions, et là c’est sans appel :

[root@router01 ~]# iperf3 -c iperf.online.net
Connecting to host iperf.online.net, port 5201
[  6] local 192.168.1.27 port 43526 connected to 51.158.1.21 port 5201
[ ID] Interval           Transfer     Bitrate
[  6]   0.00-1.00   sec  43.1 MBytes   361 Mbits/sec
[  6]   1.00-2.00   sec  48.0 MBytes   403 Mbits/sec
[  6]   2.00-3.00   sec  47.9 MBytes   402 Mbits/sec
[  6]   3.00-4.00   sec  47.9 MBytes   402 Mbits/sec
[  6]   4.00-5.00   sec  48.0 MBytes   402 Mbits/sec
[  6]   5.00-6.00   sec  46.9 MBytes   393 Mbits/sec
[  6]   6.00-7.00   sec  48.0 MBytes   402 Mbits/sec
[  6]   7.00-8.00   sec  47.9 MBytes   402 Mbits/sec
[  6]   8.00-9.00   sec  48.1 MBytes   403 Mbits/sec
[  6]   9.00-10.00  sec  47.0 MBytes   394 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  6]   0.00-10.00  sec   473 MBytes   396 Mbits/sec                  sender
[  6]   0.00-10.28  sec   473 MBytes   386 Mbits/sec                  receiver

iperf Done.

Et vers une machine sur le réseau, on n’est pas loin de la limite :

[root@router01 ~]# iperf3 -c iperf.lan
Connecting to host iperf.lan, port 5201
[  5] local 192.168.0.9 port 64196 connected to iperf.lan port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   125 MBytes  1.05 Gbits/sec
[  5]   1.00-2.00   sec   117 MBytes   983 Mbits/sec
[  5]   2.00-3.00   sec  95.6 MBytes   803 Mbits/sec
[  5]   3.00-4.00   sec   113 MBytes   948 Mbits/sec
[  5]   4.00-5.00   sec   133 MBytes  1.11 Gbits/sec
[  5]   5.00-6.00   sec  95.8 MBytes   804 Mbits/sec
[  5]   6.00-7.00   sec  67.8 MBytes   567 Mbits/sec
[  5]   7.00-8.01   sec  83.4 MBytes   695 Mbits/sec
[  5]   8.01-9.00   sec  75.8 MBytes   641 Mbits/sec
[  5]   9.00-10.01  sec   101 MBytes   844 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec  1007 MBytes   844 Mbits/sec                  sender
[  5]   0.00-10.02  sec  1007 MBytes   843 Mbits/sec                  receiver

iperf Done.

J’obtiens les mêmes débits depuis le reste du réseau ; en wifi, ça dépend évidemment de plusieurs facteurs dont la distance par rapport aux points d’accès.

Sur la VM OpenBSD, plusieurs services tournaient qu’il faut également remplacer.

Pour relayd, j’ai créé une zone pour héberger un serveur haproxy. Pour wireguard, j’ai créé une VM bhyve sous Linux parce que je n’ai pas réussi à le faire fonctionner dans une zone SmartOS. Pour les dépôts git de mes graphes Logseq - il faudra que je fasse une note à ce propos, j’ai créé une zone SmartOS.

Et pour router tout ce beau monde, j’ai mis en place du port mapping sur le routeur dans /etc/ipf/ipnat.conf :

rdr net1 192.168.1.27/32  port 22 -> 192.168.0.171 port 22
rdr net1 192.168.1.27/32  port 80 -> 192.168.0.169 port 80
rdr net1 192.168.1.27/32  port 443 -> 192.168.0.169 port 443
rdr net1 2a01:cafe:dead:beef::1/128  port 22 -> 2a01:cafe:aaaa:bbbb:cccc:dddd:eeee:fff0 port 22
rdr net1 2a01:cafe:dead:beef::1/128 port 80 -> 2a01:cafe:aaaa:bbbb:cccc:dddd:eeee:ffff port 80
rdr net1 2a01:cafe:dead:beef::1/128  port 443 -> 2a01:cafe:aaaa:bbbb:cccc:dddd:eeee:ffff port 443
rdr net1 192.168.1.27/32  port 51820 -> 192.168.0.170 port 51820 udp
[

La première ligne permet d’atteindre le port du serveur ssh de la VM contenant les depôts git Logseq pour la synchronisation entre tous les clients. La seconde et la troisième autorisent l’accès aux ports http et https de la zone contenant le reverse proxy haproxy. Les trois suivantes font la même chose en IPv6. Et enfin la dernière permet aux clients wireguard de se connecter sur le serveur dans la VM bhyve.

En parlant d’IPv6, la box de mon fournisseur autorise la délégation de préfixe. J’utilise cette fonctionnalité avec dhcpcd et la configuration suivante dans /opt/local/etc/dhcpcd.conf :

duid
noipv6rs
waitip 6

vendorclassid

option domain_name_servers, domain_name, domain_search
option classless_static_routes
option interface_mtu

option host_name


option rapid_commit

require dhcp_server_identifier

slaac hwaddr

interface net1
    ipv6rs
    # Assign WAN the iaid 1.
    iaid 1
    # Assign a Normal Address to the interface with iaid 1 (i.e. WAN).
    ia_na 1
    # Delegate a prefix with wan interface iaid 1 (i.e. WAN) and lan interface LAN.
    #ia_pd 1 net0
    ia_pd 1/::/64 net0/0/64

Il faut alors lancer dhcpcd net1, je n’ai pas encore trouvé comment lancer ça automatiquement au démarrage de la VM.

Et pour que les clients configurent automatiquement une adresse et le routeur IPv6, on ajoute le préfixe fourni par l’opérateur dans /etc/inet/ndpd.conf :

if net0 AdvSendAdvertisements 1
prefix 2a01:cafe:aaaa:bbbb::/64 net0

Et on active le service ndp :

svcadm enable ndp