machines:grifon:lns01
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | machines:grifon:lns01 [2019/03/09 12:46] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== lns01 A METTRE A JOUR ====== | ||
+ | Machine virtuelle sous Gentoo | ||
+ | |||
+ | < | ||
+ | Linux lns01.rns-cogent.grifon.fr #1 SMP Wed Feb 27 16:42:46 CET 2019 x86_64 Intel(R) Xeon(R) CPU E5645 @ 2.40GHz GenuineIntel GNU/Linux | ||
+ | </ | ||
+ | |||
+ | Routeur de collecte ADSL | ||
+ | |||
+ | ===== Administrateurs ===== | ||
+ | |||
+ | * alarig | ||
+ | * dotux | ||
+ | * gizmo | ||
+ | * nemo | ||
+ | |||
+ | ===== Services ===== | ||
+ | |||
+ | * RADIUS, freeradius (non utilisé) | ||
+ | * L2TP, xl2tpd | ||
+ | * PPP, ppp patché | ||
+ | * RA, radvd | ||
+ | * DHCPv6, kea | ||
+ | * BGP, bird | ||
+ | |||
+ | ==== RADIUS ==== | ||
+ | |||
+ | Ce service n'est pas utilisé sur les LNS mais sur bgp-adsl. Il est toujours présent pour des raisons historiques ainsi que dans un éventuel besoin futur. | ||
+ | |||
+ | Pour plus d' | ||
+ | |||
+ | ==== L2TP ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | Notre infra de collecte est très classique, nous nous faisons livrer au travers d’un tunnel L2TP. La communication avec le pppd se fait au travers d’un port série virtuel créé dans ''/ | ||
+ | |||
+ | <file | / | ||
+ | |||
+ | [lns default] | ||
+ | assign ip = no | ||
+ | local ip = 89.234.186.11 | ||
+ | pppoptfile = / | ||
+ | </ | ||
+ | |||
+ | Attention cependant, les versions (au moins) inférieures à 1.3.6 ne supportent pas ce port série virtuel. | ||
+ | ==== PPP ==== | ||
+ | |||
+ | < | ||
+ | # avec le patch plus bas et le USE radius</ | ||
+ | |||
+ | Cela nous sert à terminer le tunnel PPP initié par l’abonné. Ça va créer une interface '' | ||
+ | |||
+ | La configuration IPv4 est directement gérée par PPP avec de l’IPCP. En IPv6 il faut envoyer les RA et réponses DHCP avec des programmes externes. On utilise les scripts post-up pour ça. | ||
+ | |||
+ | Nous utilisons le plugin '' | ||
+ | |||
+ | Il faut également modifier le dictionnaire RADIUS car les attributs IPv6 ne sont pas présents par défaut. | ||
+ | |||
+ | <file | / | ||
+ | ms-dns 89.234.186.18 | ||
+ | asyncmap 0 | ||
+ | auth | ||
+ | lock | ||
+ | hide-password | ||
+ | modem | ||
+ | mru 1492 | ||
+ | -pap | ||
+ | +chap | ||
+ | -vj | ||
+ | mtu 1492 | ||
+ | name judicael | ||
+ | lcp-echo-interval 30 | ||
+ | lcp-echo-failure 4 | ||
+ | noipx | ||
+ | +ipv6 | ||
+ | plugin radius.so | ||
+ | plugin radattr.so | ||
+ | </ | ||
+ | |||
+ | <file bash | / | ||
+ | #!/bin/sh | ||
+ | |||
+ | PPP_IFACE=" | ||
+ | PPP_TTY=" | ||
+ | PPP_SPEED=" | ||
+ | PPP_LOCAL=" | ||
+ | PPP_REMOTE=" | ||
+ | PPP_IPPARAM=" | ||
+ | |||
+ | if [ ${PPP_LOCAL} = ' | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | prefix_interco=$(awk '$1 == " | ||
+ | prefix_deleg=$(awk '$1 == " | ||
+ | |||
+ | ip -6 addr add ${prefix_interco%/ | ||
+ | ip -6 route add $prefix_deleg via $PPP_REMOTE dev $PPP_IFACE | ||
+ | |||
+ | if [ ! -d /run/vpn/ ]; then | ||
+ | mkdir /run/vpn/ | ||
+ | fi | ||
+ | |||
+ | echo " | ||
+ | interface $PPP_IFACE | ||
+ | { | ||
+ | AdvSendAdvert on; | ||
+ | IgnoreIfMissing on; | ||
+ | |||
+ | prefix $prefix_interco {}; | ||
+ | }; | ||
+ | # $PPP_LOCAL $PPP_REMOTE | ||
+ | " > / | ||
+ | cat / | ||
+ | cat / | ||
+ | |||
+ | kill -HUP $(cat / | ||
+ | |||
+ | sed \ | ||
+ | -e " | ||
+ | -e " | ||
+ | -e " | ||
+ | -e " | ||
+ | / | ||
+ | |||
+ | / | ||
+ | |||
+ | # Forcer un RA après le démarage du DHCPv6 | ||
+ | kill -HUP $(cat / | ||
+ | </ | ||
+ | |||
+ | <file bash | / | ||
+ | #!/bin/sh | ||
+ | |||
+ | PPP_IFACE=" | ||
+ | PPP_TTY=" | ||
+ | PPP_SPEED=" | ||
+ | PPP_LOCAL=" | ||
+ | PPP_REMOTE=" | ||
+ | PPP_IPPARAM=" | ||
+ | |||
+ | rm -f / | ||
+ | cat / | ||
+ | cat / | ||
+ | kill -HUP $(cat / | ||
+ | |||
+ | ip -6 route del $prefix dev ${PPP_IFACE} | ||
+ | |||
+ | kill $(cat / | ||
+ | rm / | ||
+ | </ | ||
+ | |||
+ | <file | / | ||
+ | […] | ||
+ | #IPv6 | ||
+ | |||
+ | ATTRIBUTE | ||
+ | ATTRIBUTE | ||
+ | ATTRIBUTE | ||
+ | ATTRIBUTE | ||
+ | </ | ||
+ | |||
+ | PPP ne supporte pas les attributs RADIUS IPv6, il faut donc le patcher pour que ça fonctionne. Le patch a déjà publié sur la ML upstream il y a un an et demi, mais n’est toujours pas intégré. Pour le moment, on se contente donc de le mettre dans ''/ | ||
+ | |||
+ | <file diff | / | ||
+ | From 5c0cac0eeecc32e5023d353a8420633827800e8e Mon Sep 17 00:00:00 2001 | ||
+ | From: Benjamin Cama < | ||
+ | Date: Sun, 11 Oct 2015 18:08:11 +0200 | ||
+ | Subject: [PATCH] Handle IPv6 RADIUS attributes | ||
+ | |||
+ | --- | ||
+ | | ||
+ | | ||
+ | | ||
+ | 3 files changed, 48 insertions(+), | ||
+ | |||
+ | diff --git a/ | ||
+ | index 716d23f..7536941 100644 | ||
+ | --- a/ | ||
+ | +++ b/ | ||
+ | @@ -222,6 +222,9 @@ VALUE_PAIR *rc_avpair_gen (AUTH_HDR *auth) | ||
+ | { | ||
+ | |||
+ | case PW_TYPE_STRING: | ||
+ | + case PW_TYPE_IFID: | ||
+ | + case PW_TYPE_IPV6ADDR: | ||
+ | + case PW_TYPE_IPV6PREFIX: | ||
+ | memcpy (pair-> | ||
+ | pair-> | ||
+ | pair-> | ||
+ | @@ -692,9 +695,10 @@ int rc_avpair_parse (char *buffer, VALUE_PAIR **first_pair) | ||
+ | int rc_avpair_tostr (VALUE_PAIR *pair, char *name, int ln, char *value, int lv) | ||
+ | { | ||
+ | DICT_VALUE | ||
+ | - | ||
+ | + | ||
+ | struct in_addr | ||
+ | unsigned char *ptr; | ||
+ | + | ||
+ | |||
+ | *name = *value = ' | ||
+ | |||
+ | @@ -753,6 +757,26 @@ int rc_avpair_tostr (VALUE_PAIR *pair, char *name, int ln, char *value, int lv) | ||
+ | strncpy(value, | ||
+ | break; | ||
+ | |||
+ | + case PW_TYPE_IFID: | ||
+ | + ptr = pair-> | ||
+ | + | ||
+ | + (ptr[0] << 8) + ptr[1], (ptr[2] << 8) + ptr[3], | ||
+ | + (ptr[4] << 8) + ptr[5], (ptr[6] << 8) + ptr[7]); | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + case PW_TYPE_IPV6ADDR: | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + case PW_TYPE_IPV6PREFIX: | ||
+ | + | ||
+ | + str = buffer + strlen(buffer); | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | default: | ||
+ | error(" | ||
+ | return (-1); | ||
+ | diff --git a/ | ||
+ | index 72b3e70..3b2add2 100644 | ||
+ | --- a/ | ||
+ | +++ b/ | ||
+ | @@ -158,6 +158,18 @@ int rc_read_dictionary (char *filename) | ||
+ | { | ||
+ | type = PW_TYPE_DATE; | ||
+ | } | ||
+ | + else if (strcmp (typestr, " | ||
+ | + { | ||
+ | + type = PW_TYPE_IFID; | ||
+ | + } | ||
+ | + else if (strcmp (typestr, " | ||
+ | + { | ||
+ | + type = PW_TYPE_IPV6ADDR; | ||
+ | + } | ||
+ | + else if (strcmp (typestr, " | ||
+ | + { | ||
+ | + type = PW_TYPE_IPV6PREFIX; | ||
+ | + } | ||
+ | else | ||
+ | { | ||
+ | error(" | ||
+ | diff --git a/ | ||
+ | index 51b959a..ab4ef2d 100644 | ||
+ | --- a/ | ||
+ | +++ b/ | ||
+ | @@ -77,6 +77,17 @@ typedef struct pw_auth_hdr | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | +#define PW_TYPE_ABINARY | ||
+ | +#define PW_TYPE_OCTETS | ||
+ | +#define PW_TYPE_IFID | ||
+ | +#define PW_TYPE_IPV6ADDR | ||
+ | +#define PW_TYPE_IPV6PREFIX | ||
+ | +#define PW_TYPE_BYTE | ||
+ | +#define PW_TYPE_SHORT | ||
+ | +#define PW_TYPE_ETHERNET | ||
+ | +#define PW_TYPE_SIGNED | ||
+ | +#define PW_TYPE_COMBO_IP | ||
+ | +#define PW_TYPE_TLV | ||
+ | |||
+ | /* standard RADIUS codes */ | ||
+ | |||
+ | -- | ||
+ | 2.1.4 | ||
+ | </ | ||
+ | ==== RA ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | radvd veut nécessairement une configuration non vide dans ''/ | ||
+ | Ce que nous faisons, c’est que nous créons ''/ | ||
+ | |||
+ | Au reboot, nous écrasons le ''/ | ||
+ | |||
+ | <file | / | ||
+ | interface lo {}; | ||
+ | interface eth0 { | ||
+ | AdvSendAdvert off; | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | <file | / | ||
+ | |||
+ | interface ppp0 | ||
+ | { | ||
+ | AdvSendAdvert on; | ||
+ | IgnoreIfMissing on; | ||
+ | |||
+ | prefix 2a00: | ||
+ | }; | ||
+ | # fe80:: | ||
+ | |||
+ | </ | ||
+ | |||
+ | <file | / | ||
+ | interface lo {}; | ||
+ | interface eth0 { | ||
+ | AdvSendAdvert off; | ||
+ | }; | ||
+ | |||
+ | interface ppp0 | ||
+ | { | ||
+ | AdvSendAdvert on; | ||
+ | IgnoreIfMissing on; | ||
+ | |||
+ | prefix 2a00: | ||
+ | }; | ||
+ | # fe80:: | ||
+ | |||
+ | </ | ||
+ | ==== DHCPv6 ==== | ||
+ | |||
+ | Nous utilisons kea pour le DHCPv6. Pourquoi pas le serveur classique isc-dhcp ? Simplement parce qu’il ne supporte pas le medium ppp… « '' | ||
+ | |||
+ | La configuration de kea est passablement merdique (c’est du JSON…). Donc plutôt que de se taper 100 lignes de template dans le script d’up, je sed une conf type que je copie dans /run/vpn et je dis à kea d’utiliser ça. | ||
+ | |||
+ | <file | / | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { " | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | |||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Cette configuration n’est pas compatible avec la version 1.2.0-r1, il est donc impératif de rester en version 1.1.0. | ||
+ | </ | ||
+ | ==== BGP ==== | ||
+ | |||
+ | Sessions iBGP avec l' | ||
+ | ===== Conf réseau ===== | ||
+ | |||
+ | La VM ne comporte qu’un port réseau public ('' | ||
+ | |||
+ | Le trafic rentre par l’interco avec phibee sur '' | ||
+ | |||
+ | Les échanges RADIUS se font sur '' | ||
+ | |||
+ | L’interface '' | ||
+ | |||
+ | La passerelle de la machine est '' | ||
+ | |||
+ | < | ||
+ | 1: lo: < | ||
+ | link/ | ||
+ | inet 127.0.0.1/8 brd 127.255.255.255 scope host lo | ||
+ | | ||
+ | inet6 ::1/128 scope host | ||
+ | | ||
+ | 2: eth0: < | ||
+ | link/ether 7a: | ||
+ | inet 89.234.186.206/ | ||
+ | | ||
+ | inet6 2a00: | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 3: eth1: < | ||
+ | link/ether be: | ||
+ | inet 172.17.0.22/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 4: dummy0: < | ||
+ | link/ether 02: | ||
+ | inet 89.234.186.10/ | ||
+ | | ||
+ | inet 89.234.186.11/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 5: eth0.2000@eth0: | ||
+ | link/ether 7a: | ||
+ | inet 78.41.191.125/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 6: eth0.2001@eth0: | ||
+ | link/ether 7a: | ||
+ | inet 78.41.191.127/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 13: ppp0: < | ||
+ | link/ppp | ||
+ | inet 89.234.186.11 peer 89.234.186.21/ | ||
+ | | ||
+ | inet6 2a00: | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | </ |
machines/grifon/lns01.txt · Dernière modification : 2019/03/09 12:46 de 127.0.0.1