Outils pour utilisateurs

Outils du site


public:use_raspberry_4_as_router

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
public:use_raspberry_4_as_router [2020/03/20 11:01] – créée pcoudercpublic:use_raspberry_4_as_router [2022/01/31 07:28] (Version actuelle) pcouderc
Ligne 1: Ligne 1:
 +====== Use Raspberry pi 4 as router ======
 +
 +==== Why ? ====
 +
 +Why not use the router provided by the ISP ?
 +
 +The problem has arised for a QOS problem : the need to give some priority to some services like SIP for asterisk PABX. 
 +
 +==== How ? ====
 +
 +Use tutorial to install you pi4. For this use, as the pi4 is fully dedicated to the router function, we work as root, disable any password communication and connect with ssh keys.
 +
 +
 === Stop DHCPCd === === Stop DHCPCd ===
  
Ligne 30: Ligne 43:
 the old and the new IP addresses should ping... the old and the new IP addresses should ping...
  
 +=== Connect to internet ===
  
 +You need to connect your box configured to pass all traffic to the pi. This done with an additional physical adapter from USB3 to RJ45 (maybe USB2, but to spare what...?). Here we use a subnetwork, but PPPOE could be used for a simple modem. 
  
 +So we add a second interface :
 +
 +<code>
 +auto eth1
 +iface eth1 inet static
 +        address 192.168.153.2
 +        netmask 255.255.255.0
 +        gateway 192.168.153.254
 +        network 192.168.153.0
 +        broadcast 192.168.153.255
 +        dns-nameservers 192.168.153.1 212.27.40 8.8.8.8
 +        dns-search couderc.eu
 +        up /usr/local/bin/wondershaper eth1 14000 1000
 +</code>
 +
 +The last line will be explained later.
 +
 +=== Routing ===
 +
 +First routing must be enabled, by uncommenting in /etc/sysctl.conf the line :
 +
 +<code>
 +net.ipv4.ip_forward=1
 +</code>
 +
 +Routing is done by iptable and iptables-persistent
 +
 +Here is an exemple for /etc/iptables/rules.v4
 +<code>
 +*nat
 +:PREROUTING ACCEPT [0:0]
 +:INPUT ACCEPT [0:0]
 +:OUTPUT ACCEPT [0:0]
 +:POSTROUTING ACCEPT [0:0]
 +
 +# eth1 is WAN interface, #eth0 is LAN interface
 +-A POSTROUTING -o eth1 -j MASQUERADE
 +
 +#******************* PREROUTING from WAN to LAN : see too below
 +# bin
 +-A PREROUTING -p udp -i eth1 --dport 53 -j DNAT --to-destination 192.168.163.30:53
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 53 -j DNAT --to-destination 192.168.163.30:53
 +# www
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 80 -j DNAT --to-destination 192.168.163.32:80
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 443 -j DNAT --to-destination 192.168.163.32:443
 +# mail
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 25 -j DNAT --to-destination 192.168.163.36:25
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 66 -j DNAT --to-destination 192.168.163.36:66
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 143  -j DNAT --to-destination 192.168.163.36:143
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 587 -j DNAT --to-destination 192.168.163.36:587
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 993 -j DNAT --to-destination 192.168.163.36:993
 +# psql
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 5432 -j DNAT --to-destination 192.168.163.35:5432
 +#sip
 +-A PREROUTING -p tcp -m tcp -i eth1 --dport 5060  -j DNAT --to-destination 192.168.163.33:5060
 +
 +COMMIT
 +
 +*filter
 +:INPUT ACCEPT [0:0]
 +:FORWARD ACCEPT [0:0]
 +:OUTPUT ACCEPT [0:0]
 +
 +### Service rules : ce que l'on accepte sur piIVrouter
 +
 +# basic global accept rules - ICMP, loopback, traceroute, established all accepted
 +-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
 +-A INPUT -p icmp -j ACCEPT
 +-A INPUT -m state --state ESTABLISHED -j ACCEPT
 +
 +# enable traceroute rejections to get sent out
 +-A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable
 +
 +
 +# SSH - accept from LAN
 +-A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
 +# SSH - accept from WAN
 +-A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
 +
 +
 +
 +# drop all other inbound traffic
 +-A INPUT -j DROP
 +
 +### Forwarding rules : ce qui sort
 +
 +# forward packets along established/related connections
 +-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 +
 +# forward from LAN (eth0) to WAN (eth1)
 +-A FORWARD -i eth0 -o eth1 -j ACCEPT
 +
 +# allow traffic from our NAT pinhole
 +#******************* FORWARD from WAN to LAN
 +# bin
 +-A FORWARD -p udp -d 192.168.163.30 --dport 53 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.30 --dport 53 -j ACCEPT
 +# www
 +-A FORWARD -p tcp -d 192.168.163.32 --dport 80 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.32 --dport 443 -j ACCEPT
 +# mail
 +-A FORWARD -p tcp -d 192.168.163.36 --dport 25 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.36 --dport 66 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.36 --dport 143 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.36 --dport 587 -j ACCEPT
 +-A FORWARD -p tcp -d 192.168.163.36 --dport 993 -j ACCEPT
 +# psql
 +-A FORWARD -p tcp -d 192.168.163.35 --dport  5432 -j ACCEPT
 +#sip
 +-A FORWARD -p tcp -d 192.168.163.33 --dport 5060 -j ACCEPT
 +
 +# drop all other forwarded traffic
 +-A FORWARD -j DROP
 +
 +COMMIT
 +</code>
 +Note that for incoming traffic, each port appears twice, one in PREROUTING table and the other one in FORWARD table.
 +===== QOS =====
 +
 +==== Catégories de flux ====
 +(en cours de rédaction)
 +
 +Tests de rapidité de la ligne (avec apt install speedtest-cli) : 14.5 / 1.25 Mbit/
 +
 +( d'après [[https://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-127/QoS-et-gestion-du-trafic-avec-Traffic-Control|ici]])
 +
 +   * 1 interactif (DNS udp,DNS tcp, other )
 +   * 2 TCP ACKs
 +   * 3 SSH
 +   * 4 SIP/RTP
 +   * 5 HTTP
 +   * 6 mail
 +   * 7 sauvegarde (en fait tout trafic de 192.168.163.1)
 +   * 8 Divers .
 +
 +Premiers tests : implémenté comme dans la référence (sans SIP, masi maj debits et eth1)
 +
 +<code>
 +#-nettoyage
 +tc qdisc del dev eth1 root
 +#-root
 +tc qdisc add dev eth1 root handle 1: htb default 99 r2q 5
 +#--------uplink internet
 +tc class add dev eth1 parent 1:0 classid 1:1 htb rate 1250kbit ceil 1250kbit
 +#--------gigabit local
 +tc class add dev eth1 parent 1:0 classid 1:1000 htb rate 1gbit ceil 1gbit
 +# == filtre lan
 +tc filter add dev eth1 parent 1:0 protocol ip prio 1000 handle 1000 fw flowid 1:1000
 +
 +#----------------interactive
 +tc class add dev eth1 parent 1:1 classid 1:10 htb rate 128kbit ceil 200kbit burst 5k prio 1 linklayer atm
 +#----------------------------sub interactive: pfifo
 +tc qdisc add dev eth1 parent 1:10 handle 110: pfifo limit 1000
 +# == filtre interactive
 +tc filter add dev eth1 parent 1:0 protocol ip prio 1 handle 10 fw flowid 1:10
 +
 +#-----------------tcp acks
 +tc class add dev eth1 parent 1:1 classid 1:20 htb rate 64kbit ceil 1250kbit burst 300 prio 2 linklayer atm
 +#----------------------------sub tcp acks: pfifo
 +tc qdisc add dev eth1 parent 1:20 handle 120: pfifo limit 1000
 +# == filtre tcp acks
 +tc filter add dev eth1 parent 1:0 protocol ip prio 2 handle 20 fw flowid 1:20
 +
 +
 +#----------------ssh
 +tc class add dev eth1 parent 1:1 classid 1:30 htb rate 64kbit ceil 300kbit burst 2k prio 3 linklayer atm
 +#----------------------------sub ssh: sfq
 +tc qdisc add dev eth1 parent 1:30 handle 130: sfq perturb 10
 +# == filtre ssh
 +tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 30 fw flowid 1:30
 +
 +
 +
 +#----------------http/s
 +tc class add dev eth1 parent 1:1 classid 1:40 htb rate 256kbit ceil 1250kbit burst 2k prio 4
 +#####################
 +#----------------------------http/s sub 1
 +tc class add dev eth1 parent 1:40 classid 1:41 htb rate 100kbit ceil 1250kbit burst 2k prio 4 linklayer atm
 +#---------------------------------------------sub http1: sfq
 +tc qdisc add dev eth1 parent 1:41 handle 141: sfq perturb 10
 +# == filtre http/s sub 1
 +tc filter add dev eth1 parent 1:0 protocol ip prio 4 handle 41 fw flowid 1:41
 +#####################
 +#----------------------------http/s sub 2
 +tc class add dev eth1 parent 1:40 classid 1:42 htb rate 100kbit ceil 1250kbit burst 2k prio 4 linklayer atm
 +#---------------------------------------------sub http2: sfq
 +tc qdisc add dev eth1 parent 1:42 handle 142: sfq perturb 10
 +# == filtre http/s sub 2
 +tc filter add dev eth1 parent 1:0 protocol ip prio 5 handle 42 fw flowid 1:42
 +#####################
 +#----------------------------http/s sub 9
 +tc class add dev eth1 parent 1:40 classid 1:49 htb rate 56kbit ceil 1250kbit burst 2k prio 4 linklayer atm
 +#---------------------------------------------sub http 9: sfq
 +tc qdisc add dev eth1 parent 1:49 handle 149: sfq perturb 10
 +# == filtre http/s sub 3
 +tc filter add dev eth1 parent 1:0 protocol ip prio 6 handle 49 fw flowid 1:49
 +#####################
 +
 +
 +
 +#----------------torrent
 +tc class add dev eth1 parent 1:1 classid 1:50 htb rate 128kbit ceil 1250kbit burst 2k prio 5 linklayer atm
 +#----------------------------sub ssh: sfq
 +tc qdisc add dev eth1 parent 1:50 handle 150: sfq perturb 10
 +# == filtre bittorrent
 +tc filter add dev eth1 parent 1:0 protocol ip prio 7 handle 50 fw flowid 1:50
 +
 +
 +#----------------default
 +tc class add dev eth1 parent 1:1 classid 1:99 htb rate 128kbit ceil 1250kbit burst 2k prio 5 linklayer atm
 +#----------------------------sub ssh: sfq
 +tc qdisc add dev eth1 parent 1:99 handle 199: sfq perturb 10
 +# == filtre default
 +tc filter add dev eth1 parent 1:0 protocol ip prio 99 handle 99 fw flowid 1:99
 +
 +
 +</code>
 +
 +===== Procédure de secours par smartphone =====
 +
 +Cas de panne de DSLAM
 +
 +Hormis peut-être certains contrats hors de prix, si le DSLAM tombe en panne, on est en rade pour plusieurs jours. Il peut être intéressant d'utiliser un dépannage par le modem wifi intégré à un smartphone.
 +
 +Si besoin est (mais souvent sera), vérifier et valider le wifi par 
 +
 +<code>
 +rfkill
 +</code>
 +et éventuellement :
 +<code>
 +rfkill unblock 0 (ou 1...)
 +</code>
 +
 +
 +Trouver le nom de son wifi (normalement wlan0).
 +et rajouter un 
 +
 +<code>
 +
 +auto wlan0
 +iface wlan0 inet dhcp
 +
 +</code>
 +
 +
 +dans /etc/network/interface
 +
 +
 +
 +
 +
 +
 +Préparer un  /etc/ wpa_supplicant/wpa_supplicant-wlan0.conf
 +
 +<code>
 +ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
 +update_config=1
 +network={
 +    ssid="momwifi"
 +    psk="monpassw"
 +}
 +
 +</code>
 +
 +Et un lien :
 +<code>
 +ln -s /lib/systemd/system/wpa_supplicant@.service wpa_supplicant@wlan0.service
 +</code>
 +
 +Rebooter pout tout initialiser.
 +
 +Le ping de l'interface, ainsi que celui du routeur du USP devrait fonctionner. Maintenant, il faut router.
 +
 +La table de routage doit ressembler à :
 +<code>
 +$ route -n
 +Kernel IP routing table
 +Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 +0.0.0.0         192.168.153.254 0.0.0.0         UG    0      0        0 eth1
 +192.168.43.0    0.0.0.0         255.255.255.0            0        0 wlan0
 +192.168.153.0   0.0.0.0         255.255.255.0            0        0 eth1
 +192.168.163.0   0.0.0.0         255.255.255.0            0        0 eth0
 +</code>
 +
 +Modifions le routage par défaut (gateway 192.168.41.1 chez free.fr) :
 +<code>
 +route del default
 +route add default gw 192.168.43.1 wlan0
 +route -n
 +</code>
 +Il faudra rendre ce routage permanent. A tester dans /etc/network/interface :
 +<code>
 +up ip route add...
 +</code>
  
public/use_raspberry_4_as_router.1584702080.txt.gz · Dernière modification : 2020/03/20 11:01 de pcouderc

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki