Reiwas Verfahren zur Erstellung eines Linux-Routers ~ mit raspi4 ~

Reiwas Verfahren zur Erstellung eines Linux-Routers

TL;DR Sie können es für etwa 15.000 Yen machen Ich war süchtig nach dem Path MTU Discovery-Problem

fließen

Normalerweise mache ich folgendes:

  1. Installation des Betriebssystems
  2. PPPoE-Verbindung (Verbindung zum Fretz-Netzwerk)
  3. Aufbau von DHCP und DNS
  4. Erstellen Sie ein lokales Netzwerk (Brückenverbindung zwischen drahtgebunden und drahtlos)
  5. Konfiguration von iptables
  6. Machen Sie uPNP kompatibel

Notwendige Werkzeuge

muss (ungefähr \ 14000)

may

Installation des Betriebssystems

Vorgehensweise zum Zeitpunkt der Bearbeitung

Bitte lesen Sie den X-Teil von sdX entsprechend Ihrer Umgebung.

#SD-Kartenformat
fdisk /dev/sdx

Drücken Sie o, um die Partition zu löschen
Drücken Sie n, um eine Partition zu erstellen
Drücken Sie p und dann 1, um die primäre Partition zu erstellen
Drücken Sie die Eingabetaste, ohne etwas einzugeben. Geben Sie den ersten Sektor an.+128 MB von Anfang an 128 MB bis zur ersten Partition
Ändern Sie die erste Partition in FAT32, indem Sie t und dann c drücken
Drücken Sie p und dann 2, um eine primäre Partition zu erstellen
Drücken Sie die Eingabetaste, ohne etwas einzugeben, um den ersten Sektor anzugeben, drücken Sie die Eingabetaste, ohne etwas einzugeben, und machen Sie den gesamten verbleibenden Bereich zur zweiten Partition
Drücken Sie w, um Ihre Änderungen zu schreiben

#Partitionen formatieren und einhängen
mkfs.vfat /dev/sdx1
mkfs.ext4 /dev/sdx1
mkdir {boot,root}
mount /dev/sdx1 boot
mount /dev/sdx2 root

#Installation des Betriebssystems
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-4-latest.tar.gz
bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
sync

#Verschieben Sie die Startdateien in die erste Partition
mv root/boot/* boot

#Entfernen Sie die SD-Karte und starten Sie das Betriebssystem
umount boot root

#Betriebssysteminitialisierung
##* RHELs "Abonnement"-Weil es ein Befehl wie "Manager Register" ist
##Ich habe das Gefühl, dass die Nuancen der Initialisierung unterschiedlich sind, aber zu solchen Zeiten initialisiert werden,bevölkern
##Bitte kommentieren Sie, wenn Sie die entsprechende japanische Übersetzung kennen
pacman-key --init
pacman-key --populate archlinuxarm

Standardmäßig sind less und vim nicht enthalten und die Installation ist zu unpraktisch.

pacman -S vim less

Verbindung zum Fretz-Netzwerk

Wenn Sie ppp unter Linux verbinden, können Sie problemlos eine Verbindung mit ppp herstellen.

ppp Installation

pacman -S ppp

ppp Einstellungen

Erstellen Sie die Konfigurationsdatei in / etc / ppp / peer / . Die Einstellungen sind wie folgt. Siehe pppd (8) für weitere Details.

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

#Geben Sie die Schnittstelle auf der WAN-Seite an. eth0 ist der LAN-Port, der am häufigsten an Raspi angeschlossen wird.
eth0

#Beschreibt die vom Anbieter angegebene Verbindungs-ID.@<Domain>Ist auch erforderlich.
name "[email protected]"

#Verwenden Sie den vom ISP bereitgestellten DNS-Server
usepeerdns

#Immer verbinden. Trennen Sie jedes Mal die Verbindung<demand>Sie können es aber lassen
#Das Ausschalten ist schneller, daher gibt es in den meisten Fällen kein Problem mit dem Fortbestehen.
persist 

#Wird automatisch zur Routing-Tabelle hinzugefügt, wenn eine PPP-Verbindung hergestellt wird
defaultroute

#Unterdrückt die Ausgabe von Passwörtern im Protokoll.
hide-password

#Der ISP muss nicht zertifiziert werden. Grundsätzlich sollte es auth sein, aber es scheint noauth zu sein, wenn es um ISP geht
noauth

#Aktivieren Sie die IPV6-Verbindung
+ipv6

Das Kennwort für die PPP-Verbindung lautet "/ etc / ppp / pap-Geheimnisse" oder "/ etc / ppp / chap-Geheimnisse". Wenn die Verbindungsmethode vom ISP angegeben wird, wird sie angegeben. Schreiben Sie das Passwort auf die Methodenseite.

Es funktioniert gut, wenn Sie es in beiden schreiben. Wenn Sie es also nicht verstehen, können Sie es in beiden schreiben.

# /etc/ppp/pap-secrets
<Wert angegeben durch Namen> * <ISP-angegebenes Passwort>

(Beispiel)
[email protected] * password

Versuchen Sie, die PPP-Verbindung manuell zu starten, um die Verbindung zu überprüfen.

pppd call /etc/ppp/peers/hogehoge

Wenn es richtig funktioniert, wird ppp0 erstellt.

ip a
...
ppp0:

Stellen Sie den Dienst so ein, dass er beim Start des Betriebssystems automatisch gestartet wird.

systemctl enable [email protected]

Erstellen eines lokalen Netzwerks

Erstellen Sie ein Heimnetzwerk mit systemd-networkd.

Überprüfen Sie zunächst die auf dem Terminal vorhandene Netzwerkschnittstelle.

ip a

Sie sollten die folgende Ausgabe erhalten.

lo:
eth0:
enp1s0u1:
wlan0:
ppp0:

Da es praktisch ist, drahtlose und kabelgebundene Kommunikation (Bonjour usw.) zu haben, werde ich einen Brückenadapter erstellen und die kabelgebundene Netzwerkschnittstelle und die kabellose Netzwerkschnittstelle virtuell mit dem L2-Netzwerk verbinden.

Erstellen eines Bridge-Adapters

Erstellen Sie die folgende Datei, um den Bridge-Adapter zu erstellen.

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

Starten Sie nach dem Erstellen der Datei systemd-netwokrd neu.

systemctl restart systemd-networkd

Wenn Sie die Liste der Netzwerkschnittstellen erneut anzeigen, wird das Netzwerkgerät erstellt.

Es besteht keine Notwendigkeit, brctl oder andere lästige Dinge zu tun, da es sich um eine Versöhnung handelt.

ip a
lo:
...
br0: (← erhöhen)

Verbinden Sie anschließend das Gerät für Ihr lokales Netzwerk mit der Bridge. Da eth0 für die PPP-Verbindung verwendet wird, wird es nicht geändert.

# /etc/systemd/network/enp1s0u1.network (Erstelle neu)
[Match]
Name=enp1s0u1

[Network]
Bridge=br0

# /etc/systemd/network/wlan0.network (Erstelle neu)
[Match]
Name=wlan0

[Network]
Bridge=br0

Die Netzwerkschnittstelle ist jetzt mit der Bridge verbunden.

Es ist einfach, weil es ein Dekret ist.

Geben Sie als Nächstes die IP-Adresse statisch an, damit sie im lokalen Netzwerk erkannt werden kann. Dieses Mal habe ich es auf 192.168.0.1/24 gesetzt, aber jede als lokale Adresse angegebene Adresse (https://tools.ietf.org/html/rfc1918) reicht aus.

Aus der Schlussfolgerung ist es die folgende Adresse.

# /etc/systemd/network/br0.network (Erstelle neu)
[Match]
Name=br0

[Network]
Address=192.168.0.1/24
Gateway=192.168.0.1

Starten Sie systemd-networkd nach Abschluss der Einstellungen erneut.

systemctl restart systemd-networkd

Wie unten gezeigt, beginnt br0 mit 192.168.0.1, und enp1s0u1 und wlan0 haben keine IP-Adresse, da sie über L2 verbunden sind. (Die MAC-Adresse usw. hängt von der Umgebung ab. Bitte lesen Sie sie entsprechend.)

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

Aufbau von DHCP und DNS

Das lokale Netzwerk wird durch das bisherige Verfahren erstellt. Wenn Sie die Adresse 192.168.0.0/24 manuell eingeben, funktioniert es normal, ist jedoch zu mühsam, um es einzeln auszuführen. Erstellen Sie daher einen DHCP- und DNS-Server.

Erstellen Sie einen DHCP-Server

Installieren Sie dhcpd.

pacman -S dhcpd

Die dhcpd-Konfigurationsdatei lautet "/etc/dhcpd.conf". Erstellen Sie eine Einstellungsdatei wie unten gezeigt.

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;
}

Durch diese Einstellung werden die folgenden Einstellungen automatisch im lokalen Netzwerk vorgenommen.

Aufbau Wert
IP Adresse 192.168.0.10〜192.168.0.200 freie IPs
Standard-Gateway 192.168.0.1
Subnetzmaske 255.255.255.0
DNS Server 192.168.0.1

Starten Sie nach der Erstellung den DHCP-Server und aktivieren Sie den automatischen Start.

systemctl enable dhcpd4
systemctl start dhcpd4

Der obige Satz kann mit der folgenden Zeile identisch sein. (Jabashi)

systemctl enable --now dhcpd4

DNS-Server erstellen

Der Name des lokalen PCs wird nicht aufgelöst, sondern ein DNS-Cache-Server erstellt, der nur die DNS-Informationen des Internets enthält.

Installieren Sie zuerst bind.

pacman -S bind 

Die Konfigurationsdatei lautet "/etc/named.conf". Die Einstellungen beim Erstellen als DNS-Cache-Server lauten wie folgt.

options {
    //Verzeichnis zum Generieren verschiedener Dateien
    directory "/var/named";

    //PID-Dateipfad
    pid-file "/run/named/named.pid";  

    //Netzwerk wartet auf DNS-Abfragen
    listen-on { 127.0.0.1; 192.168.0.0/24; };

    //Netzwerk, das auf DNS-Anfragen antwortet
    allow-recursion { 127.0.0.1; 192.168.0.0/24; };

    //Netzwerke, die DNS-Zonenübertragungen ermöglichen
    allow-transfer { none; };
    //Netzwerk, das das Umschreiben von DNS-Zoneninformationen ermöglicht
    allow-update { none; };

    //Lösen Sie Namen nur von Spediteuren auf
    forward only;
    //Übergeordnetes DNS, das von diesem DNS-Server verwendet wird(8.8.8.8,8.8.4.4 ist Googles DNS)
    forwarders{ 8.8.8.8; 8.8.4.4; };

    //Serverinformationen ausblenden
    version none;
    hostname none;
    server-id none;
};

Starten Sie nach Abschluss der Einstellungen die Bindung mit dem folgenden Befehl und aktivieren Sie den automatischen Start.

systemctl enable named
systemctl start named

Konfiguration von iptables

Wie Sie vielleicht wissen, können Sie von Raspi aus eine Verbindung zum Internet herstellen, aber Sie können derzeit keine Verbindung zum Internet von Ihrem lokalen Netzwerk aus herstellen. Ermöglicht das Verlassen des ppp0-Netzwerks aus Ihrem lokalen Netzwerk.

Erlauben Sie zunächst die IP-Weiterleitung, da diese im Betriebssystem deaktiviert ist.

cat /proc/sys/net/ipv4/ip_forward
0(Ungültig)
# /etc/sysctl.d/ipforward.conf (Erstelle neu)
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

Starten Sie das Betriebssystem nach dem Erstellen der Einstellungen neu.

Wenn Sie erneut prüfen, sollte die IP-Weiterleitung aktiviert sein.

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

Dann installieren Sie iptables.

pacman -S iptables

Ursprünglich sollte es einzeln mit dem Befehl iptables hinzugefügt werden, aber bearbeiten Sie "/etc/iptables/iptables.rule" wie folgt.

*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

Die Bedeutung jeder Einstellung ist wie folgt.

#Es handelt sich um eine Tabelle mit Einstellungen zur Netzwerkqualität des IP-Netzwerks, das als ToS-Feld bezeichnet wird und als Mangle-Tabelle bezeichnet wird.
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

#Ergreifen Sie Maßnahmen gegen das Path MTU Discovery-Problem.
#In Qiita, Stapelüberlauf usw. beträgt die Größe der gleichzeitig gesendeten Pakete"""Warum"""Weil es groß eingestellt ist
#Wenn der Standardwert 1500 ist, ist die Paketgröße größer als vom Netzwerk erwartet und Daten gehen in der Mitte verloren.
#Es wird zerstört. Stellen Sie die Paketgröße des MSS-Pakets mit den folgenden Einstellungen auf die Remote-Seite ein
#Aktiviert die Tell-Funktion und verhindert, dass nicht empfangene Pakete gesendet werden.

-A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --clamp-mss-to-pmtu
#Eine Tabelle, die die Verbindungsberechtigung verweigert.
*filter

#Pakete von außerhalb ablehnen, die keiner Regel unterliegen
:INPUT DROP [0:0]

#Verweigern Sie Pakete, die einen Server durchlaufen, der keiner der Regeln entspricht
:FORWARD DROP [0:0]

#Pakete von Raspi zu einem anderen Netzwerk sind zulässig.
:OUTPUT ACCEPT [0:0]

# TCP/Dies ist eine für UDP erstellte Tabelle.
:TCP - [0:0]
:UDP - [0:0]

#Lokales Netzwerk(br0)DNS-Abfragen von zulassen.
-A INPUT -i br0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 53 -j ACCEPT

#Lokales Netzwerk(br0)DHCP-Anfragen von zulassen.
-A INPUT -i br0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i br0 -p tcp -m tcp --dport 67 -j ACCEPT

#Ermöglicht die gesamte Kommunikation von Raspi selbst.
-A INPUT -i lo -j ACCEPT

#Erlaube Verbindungen, die bereits auf irgendeine Weise hergestellt wurden.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Ermöglicht ICMP-Echo.
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

#Die UDP-Verbindung wird an die UDP-Tabellenverarbeitung delegiert
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP

#Übertragen Sie die TCP-Verbindung zur TCP-Tabellenverarbeitung
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP

#Löscht Verbindungen mit unbekanntem Status.
-A INPUT -m conntrack --ctstate INVALID -j DROP

#Pakete, die nicht mit der UDP-Tabelle übereinstimmen, werden mit dem Fehler zurückgewiesen, dass der Host nicht vorhanden ist.
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable

#TCP RESET lehnt Pakete ab, die nicht mit der TCP-Tabelle übereinstimmen.
-A INPUT -p tcp -j REJECT --reject-with tcp-reset

#Lehnen Sie andere Verbindungen mit einem Fehler ab, für den kein entsprechendes Protokoll vorhanden ist.
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

#Ermöglicht die Kommunikation vom lokalen Netzwerk zum Internet.
-A FORWARD -i br0 -j ACCEPT

#Ermöglicht Sitzungen, die von der lokalen Netzwerkseite eingerichtet wurden, den Server zu durchlaufen.
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Lehnen Sie eine Kommunikation ab, die nicht zu den beiden besten gehört.
-A FORWARD -j REJECT --reject-with icmp-host-unreachable

# 192.168.0.0/Blockiert die Kommunikation für 24 Personen zum Internet.
-A OUTPUT -o ppp0 -d 192.168.0.0/24 -j DROP

#SSH-Verbindung zulassen.
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
#Dies ist die Tabelle, wenn das lokale Netzwerk ins Internet geht
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

#Die Kommunikation vom lokalen Netzwerk zum Internet wird dynamisch zugewiesen und von iptables kommuniziert.
#Bei Einstellung auf SNAT wird immer ein konstanter Wert verwendet.
-A POSTROUTING -o ppp0 -j MASQUERADE

Starten Sie nach Abschluss der Einstellungen iptables mit dem folgenden Befehl und aktivieren Sie den automatischen Start.

systemctl enable iptables
systemctl restart iptables

Machen Sie uPNP kompatibel

Da es sich um ein Dekret handelt, möchte ich manchmal, dass Netzwerkgeräte Ports mit uPNP dynamisch öffnen. Installieren Sie daher miniupnpd, damit der Router als Antwort auf Anforderungen des lokalen Netzwerks dynamisch Ports öffnen kann.

pacman -S miniupnpd

Die Konfigurationsdatei lautet "/etc/miniupnpd/miniupnpd.conf".

#Gibt die äußere Schnittstelle an
ext_ifname=ppp0

#Gibt die innere Schnittstelle an
listening_ip=br0

#Socket-Datei(Datei für die interne Kommunikation)Geben Sie den Speicherort von an.
minissdpdsocket=/var/run/minissdpd.sock

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

#Gibt die Netzwerke an, die upnp zulassen
allow 1024-65535 192.168.0.0/24 1024-65535
deny 0-65535 0.0.0.0/0 0-65535

Starten Sie nach Abschluss der Einstellungen miniupnpd mit dem folgenden Befehl und aktivieren Sie den automatischen Start.

systemctl enable miniupnpd
systemctl restart miniupnpd

Recommended Posts

Reiwas Verfahren zur Erstellung eines Linux-Routers ~ mit raspi4 ~
Installationsverfahren für Linux Mint
NAT-Router unter Linux
Erstellungsverfahren für das Steuerhaus manylinux1
Erstellen Sie ein Linux SVN-Repository
Erstellen Sie LiveUSB unter Linux