Procédure de création de routeur Linux de Reiwa ~ avec raspi4 ~

Procédure de création du routeur Linux de Reiwa

TL;DR Vous pouvez le faire pour environ 15000 yens J'étais accro au problème de Path MTU Discovery

couler

Je fais généralement ce qui suit:

  1. Installation du système d'exploitation
  2. Connexion PPPoE (connexion au réseau Fretz)
  3. Construction de DHCP et DNS
  4. Créez un réseau local (connexion de pont entre filaire et sans fil)
  5. Configuration d'iptables
  6. Rendre compatible uPNP

Outils nécessaires

doit (environ \ 14000)

may

Installation du système d'exploitation

Procédure au moment de l'édition

Veuillez lire la partie X de sdX en fonction de votre environnement.

#Format de la carte SD
fdisk /dev/sdx

Appuyez sur o pour supprimer la partition
Appuyez sur n pour créer une partition
Appuyez sur p puis sur 1 pour créer la partition principale
Appuyez sur Entrée sans rien saisir, spécifiez le premier secteur,+128 Mo du début 128 Mo à la première partition
Changez la première partition en FAT32 en appuyant sur t puis sur c
Appuyez sur p puis sur 2 pour créer une partition principale
Appuyez sur Entrée sans rien entrer pour spécifier le premier secteur, appuyez sur Entrée sans rien entrer et faites de toute la zone restante la deuxième partition
Appuyez sur w pour écrire vos modifications

#Formatage et montage de partitions
mkfs.vfat /dev/sdx1
mkfs.ext4 /dev/sdx1
mkdir {boot,root}
mount /dev/sdx1 boot
mount /dev/sdx2 root

#Installation du système d'exploitation
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-4-latest.tar.gz
bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
sync

#Déplacer les fichiers de démarrage vers la première partition
mv root/boot/* boot

#Retirez la carte SD et démarrez le système d'exploitation
umount boot root

#Initialisation du système d'exploitation
##* "Abonnement" de RHEL-Parce que c'est une commande comme "registre du gestionnaire"
##Je sens que les nuances d'initialisation sont différentes, mais initialiser à de tels moments,peupler
##Veuillez commenter si vous connaissez la traduction japonaise appropriée
pacman-key --init
pacman-key --populate archlinuxarm

Par défaut, less et vim ne sont pas inclus et il est trop peu pratique à installer.

pacman -S vim less

Connexion au réseau Fretz

Lorsque vous connectez ppp à partir de Linux, vous pouvez facilement vous connecter en utilisant ppp.

installation de ppp

pacman -S ppp

paramètres ppp

Créez le fichier de configuration dans / etc / ppp / peers / <nom de fichier approprié>. Les paramètres sont les suivants. Voir pppd (8) pour plus de détails.

vim /etc/ppp/peers/hogehoge
plugin rp-pppoe.so

#Spécifiez l'interface côté WAN. eth0 est le port LAN le plus souvent connecté à Raspi.
eth0

#Décrit l'ID de connexion spécifié par le fournisseur.@<domaine>Est également requis.
name "[email protected]"

#Utilisez le serveur DNS fourni par le FAI
usepeerdns

#Connectez-vous toujours. Déconnectez-vous à chaque fois<demand>Vous pouvez le laisser, mais
#Il est plus rapide de couper l'alimentation, donc dans la plupart des cas, il n'y a pas de problème avec persist.
persist 

#Ajouté automatiquement à la table de routage lorsqu'une connexion ppp est établie
defaultroute

#Supprime la sortie des mots de passe dans le journal.
hide-password

#N'exigez pas de FAI de certifier. Fondamentalement, cela devrait être auth, mais cela semble être inutile lorsqu'il s'agit de FAI
noauth

#Activer la connexion IPV6
+ipv6

Le mot de passe pour la connexion PPP est "/ etc / ppp / pap-secrets" ou "/ etc / ppp / chap-secrets", et si la méthode de connexion est spécifiée par le FAI, elle est spécifiée. Écrivez le mot de passe côté méthode.

Cela fonctionne bien si vous l'écrivez dans les deux, donc si vous ne le comprenez pas, vous pouvez l'écrire dans les deux.

# /etc/ppp/pap-secrets
<Valeur spécifiée par nom> * <Mot de passe spécifié par le FAI>

(Exemple)
[email protected] * password

Pour vérifier la connexion, essayez de démarrer manuellement la connexion PPP.

pppd call /etc/ppp/peers/hogehoge

S'il fonctionne correctement, ppp0 sera créé.

ip a
...
ppp0:

Configurez le service pour qu'il démarre automatiquement au démarrage du système d'exploitation.

systemctl enable [email protected]

Créer un réseau local

Créez un réseau domestique avec systemd-networkd.

Vérifiez d'abord l'interface réseau qui existe sur le terminal.

ip a

Vous devriez obtenir la sortie suivante.

lo:
eth0:
enp1s0u1:
wlan0:
ppp0:

Puisqu'il est pratique d'avoir une communication sans fil et filaire (Bonjour, etc.), je vais créer un adaptateur de pont et connecter l'interface réseau filaire et l'interface réseau sans fil virtuellement au réseau L2.

Créer un adaptateur de pont

Créez le fichier suivant pour créer l'adaptateur de pont.

# /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge

Après avoir créé le fichier, redémarrez systemd-netwokrd.

systemctl restart systemd-networkd

Lorsque vous affichez à nouveau la liste des interfaces réseau, le périphérique réseau est créé.

Il n'est pas nécessaire de faire brctl ou d'autres choses gênantes car c'est une réconciliation.

ip a
lo:
...
br0: (← augmenter)

Ensuite, connectez l'appareil de votre réseau local au pont. Étant donné que eth0 est utilisé pour la connexion PPP, il ne sera pas modifié.

# /etc/systemd/network/enp1s0u1.network (Créer un nouveau)
[Match]
Name=enp1s0u1

[Network]
Bridge=br0

# /etc/systemd/network/wlan0.network (Créer un nouveau)
[Match]
Name=wlan0

[Network]
Bridge=br0

L'interface réseau est maintenant connectée au pont.

C'est facile parce que c'est un décret.

Ensuite, spécifiez l'adresse IP de manière statique afin qu'elle puisse être reconnue sur le réseau local. Cette fois, je l'ai réglé sur 192.168.0.1/24, mais il n'y a pas de problème si c'est l'adresse spécifiée comme adresse locale (https://tools.ietf.org/html/rfc1918).

Dès la conclusion, c'est l'adresse suivante.

# /etc/systemd/network/br0.network (Créer un nouveau)
[Match]
Name=br0

[Network]
Address=192.168.0.1/24
Gateway=192.168.0.1

Une fois les paramètres définis, redémarrez systemd-networkd.

systemctl restart systemd-networkd

Comme indiqué ci-dessous, br0 commence par 192.168.0.1, et enp1s0u1 et wlan0 n'ont pas d'adresse IP car ils sont connectés par L2. (L'adresse MAC, etc. varie en fonction de l'environnement, veuillez donc la lire comme il convient.)

enp1s0u2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 04:ab:18:3c:d4:6b brd ff:ff:ff:ff:ff:ff
br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ae:52:e3:c8:67:ca brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever
wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether dc:a6:32:71:0b:9e brd ff:ff:ff:ff:ff:ff

Construction de DHCP et DNS

Le réseau local est créé par la procédure jusqu'à présent, et si vous entrez manuellement l'adresse 192.168.0.0/24, cela fonctionnera normalement, mais il est trop difficile de le faire un par un. Par conséquent, créez un serveur DHCP et DNS.

Construire un serveur DHCP

Installez dhcpd.

pacman -S dhcpd

Le fichier de configuration dhcpd est "/etc/dhcpd.conf". Créez un fichier de paramètres comme indiqué ci-dessous.

option domain-name-servers 192.168.0.1;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.10 192.168.0.200;
}

En définissant ce paramètre, les paramètres suivants seront automatiquement définis sur le réseau local.

Réglage valeur
adresse IP 192.168.0.10〜192.168.0.200 adresses IP gratuites
passerelle par défaut 192.168.0.1
masque de sous-réseau 255.255.255.0
Serveur dns 192.168.0.1

Après la création, démarrez le serveur DHCP et activez le démarrage automatique.

systemctl enable dhcpd4
systemctl start dhcpd4

L'ensemble ci-dessus peut être le même avec la ligne suivante. (Jabashi)

systemctl enable --now dhcpd4

Créer un serveur DNS

Il ne résout pas le nom du PC local, mais crée un serveur de cache DNS qui ne contient que les informations DNS d'Internet.

Tout d'abord, installez bind.

pacman -S bind 

Le fichier de configuration est "/etc/named.conf". Les paramètres lors de la création en tant que serveur de cache DNS sont les suivants.

options {
    //Répertoire pour générer divers fichiers
    directory "/var/named";

    //Chemin du fichier PID
    pid-file "/run/named/named.pid";  

    //Écoute réseau pour les requêtes DNS
    listen-on { 127.0.0.1; 192.168.0.0/24; };

    //Réseau qui répond aux requêtes DNS
    allow-recursion { 127.0.0.1; 192.168.0.0/24; };

    //Réseaux qui autorisent les transferts de zone DNS
    allow-transfer { none; };
    //Réseau qui permet la réécriture des informations de zone DNS
    allow-update { none; };

    //Résoudre les noms uniquement des transitaires
    forward only;
    //DNS parent utilisé par ce serveur DNS(8.8.8.8,8.8.4.4 est le DNS de Google)
    forwarders{ 8.8.8.8; 8.8.4.4; };

    //Masquer les informations du serveur
    version none;
    hostname none;
    server-id none;
};

Une fois les paramètres définis, démarrez la liaison avec la commande suivante et activez le démarrage automatique.

systemctl enable named
systemctl start named

configuration d'iptables

Comme vous le savez peut-être si vous l'avez essayé jusqu'à présent, vous pouvez vous connecter à Internet à partir de Raspi, mais vous ne pouvez pas vous connecter à Internet à partir de votre réseau local pour le moment. Vous permet de quitter le réseau ppp0 de votre réseau local.

Tout d'abord, autorisez le transfert IP car il est désactivé dans le système d'exploitation.

cat /proc/sys/net/ipv4/ip_forward
0(Invalide)
# /etc/sysctl.d/ipforward.conf (Créer un nouveau)
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

Après avoir créé les paramètres, redémarrez le système d'exploitation.

Si vous vérifiez à nouveau, le transfert IP doit être activé.

cat /proc/sys/net/ipv4/ip_forward
1

Ensuite, installez iptables.

pacman -S iptables

À l'origine, vous devez les ajouter un par un avec la commande iptables, mais éditez "/etc/iptables/iptables.rule" comme suit.

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:MINIUPNPD - [0:0]
-A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -i br0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i br0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
-A OUTPUT -o ppp0 -d 192.168.0.0/24 -j DROP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT

La signification de chaque paramètre est la suivante.

#Il s'agit d'un tableau de paramètres liés à la qualité du réseau du réseau IP appelé le champ ToS appelé table mangle.
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

#Prenez des mesures contre le problème Path MTU Discovery.
#Dans Qiita, débordement de pile, etc., la taille des paquets envoyés en même temps est"""Pourquoi"""Parce qu'il est grand
#Si la valeur par défaut est 1500, la taille du paquet sera plus grande que prévu par le réseau et les données seront perdues au milieu.
#Il sera détruit. Définissez la taille de paquet du paquet MSS du côté distant avec les paramètres suivants
#Active la fonction tell et empêche l'envoi des paquets non reçus.

-A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --clamp-mss-to-pmtu
#Une table qui refuse l'autorisation de connexion.
*filter

#Rejeter les paquets de l'extérieur qui n'entrent dans aucune règle
:INPUT DROP [0:0]

#Refuser les paquets qui passent par un serveur qui n'entre dans aucune des règles
:FORWARD DROP [0:0]

#Les paquets de raspi vers un autre réseau sont autorisés.
:OUTPUT ACCEPT [0:0]

# TCP/Il s'agit d'une table créée pour UDP.
:TCP - [0:0]
:UDP - [0:0]

#Réseau local(br0)Autoriser les requêtes DNS à partir de.
-A INPUT -i br0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 53 -j ACCEPT

#Réseau local(br0)Autoriser les demandes DHCP de.
-A INPUT -i br0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 67 -j ACCEPT

#Permet toute communication de raspi lui-même.
-A INPUT -i lo -j ACCEPT

#Autorisez les connexions qui ont déjà été établies d'une manière ou d'une autre.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Autorise l'écho ICMP.
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

#La connexion UDP est déléguée au traitement de la table UDP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP

#Transférer la connexion TCP vers le traitement de la table TCP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP

#Supprime les connexions de statut inconnu.
-A INPUT -m conntrack --ctstate INVALID -j DROP

#Les paquets qui ne correspondent pas à la table UDP sont rejetés avec une erreur indiquant que l'hôte n'existe pas.
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable

#TCP RESET rejette les paquets qui ne correspondent pas à la table TCP.
-A INPUT -p tcp -j REJECT --reject-with tcp-reset

#Rejetez les autres connexions avec une erreur qui n'a pas de protocole correspondant.
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

#Permet la communication du réseau local vers Internet.
-A FORWARD -i br0 -j ACCEPT

#Permet aux sessions établies du côté du réseau local de passer par le serveur.
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Rejetez les communications qui ne font partie ni des deux premiers.
-A FORWARD -j REJECT --reject-with icmp-host-unreachable

# 192.168.0.0/Empêche la communication pendant 24 heures de sortir sur Internet.
-A OUTPUT -o ppp0 -d 192.168.0.0/24 -j DROP

#Autorisez la connexion SSH.
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
#Ceci est le tableau lorsque le réseau local sort sur Internet
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

#La communication du réseau local vers Internet est attribuée et communiquée de manière dynamique par iptables.
#Lorsqu'il est réglé sur SNAT, une valeur constante est toujours utilisée.
-A POSTROUTING -o ppp0 -j MASQUERADE

Une fois les paramètres définis, démarrez iptables avec la commande suivante et activez le démarrage automatique.

systemctl enable iptables
systemctl restart iptables

Rendre compatible uPNP

Puisqu'il s'agit d'un décret, il y a des moments où je veux que les périphériques réseau ouvrent dynamiquement des ports avec uPNP. Par conséquent, installez miniupnpd afin que le routeur puisse ouvrir dynamiquement les ports en réponse aux demandes du réseau local.

pacman -S miniupnpd

Le fichier de configuration est "/etc/miniupnpd/miniupnpd.conf".

#Spécifie l'interface externe
ext_ifname=ppp0

#Spécifie l'interface interne
listening_ip=br0

#Fichier de socket(Dossier de communication interne)Spécifiez l'emplacement de.
minissdpdsocket=/var/run/minissdpd.sock

secure_mode=no
system_uptime=yes
notify_interval=60
clean_ruleset_interval=600
uuid=00000000-0000-0000-0000-000000000000

#Spécifie le réseau qui autorise upnp
allow 1024-65535 192.168.0.0/24 1024-65535
deny 0-65535 0.0.0.0/0 0-65535

Une fois les paramètres définis, démarrez miniupnpd avec la commande suivante et activez le démarrage automatique.

systemctl enable miniupnpd
systemctl restart miniupnpd

Recommended Posts

Procédure de création de routeur Linux de Reiwa ~ avec raspi4 ~
Procédure d'installation de Linux mint
Routeur NAT sur Linux
procédure de création de la timonerie manylinux1
Créer un référentiel SVN Linux
Créer LiveUSB sur Linux