[LINUX] Einfacher VPN-Aufbau eines IPSec-Gateways mit Ubuntu 20.04 und Raspberry Pi ―― 1. StrongSwan eingeführt

Annahmen und Vorbereitungen

Artikel zum Aufbau eines Linux-Servers

Letztes Mal habe ich ein IPSec-Gateway mit StrongSwan-Quellkompilierung mit CentOS 8 + Raspeye openSUSE erstellt. Ich habe versucht, dies mit Ubuntu 20.04 und Raspberry Pi OS (˶ ・ ᴗ ・) ੭⚐⚑ zu tun

Umgebung

--IPST-Programm: StrongSwan 5.9.0 (Quellensammlung)

Annahme

Serverbedingungen

IP-Adresse und Netzwerkaufbau

Funktionen und Versionen zum individuellen Herunterladen und Installieren von Paketen (Stand September 2020)

Andere erforderliche Pakete werden mit den Standardpaketbefehlen der Distribution (dnf, apt usw.) installiert und müssen nicht einzeln heruntergeladen werden.

Zum Herunterladen können Sie auf die offizielle Website zugreifen, von dort herunterladen und per FTP übertragen oder mit wget abrufen, wenn Sie die URL der Download-Datei kennen, die Erfassungsmethode jedoch weggelassen wurde.

Arbeitsablauf

Vorbereitung

Installieren Sie die Dekomprimierungsfunktionen make, cmake und package

Installieren Sie jede Distribution mit der virtuellen Hyper-V-Maschine und Raspeye (die Quellkompilierung ist für beide gleich).

Ubuntu20.04(Hyper-V/x64)


# apt-get -y install make cmake tar bzip2

RaspberryPiOS(2020.08)


# apt-get -y install make cmake tar bzip2

Installation von GCC und C ++ Compiler

Ubuntu20.04(Hyper-V/x64)


# apt-get -y install gcc build-essential

RaspberryPiOS(2020.08)


# apt-get -y install gcc build-essential

Installation der zlib-Quelle

Ich habe die zlib mit dem Standardspeicherort installiert. Die Quellkompilierung ist für virtuelle Hyper-V-Maschinen und Raspeye identisch

# cd [Verzeichnis, in dem sich zlib-Archivdateien befinden]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install

Aktivieren Sie die IP-Übertragung

Die IP-Weiterleitung muss aktiviert sein, um als IPSec-Gateway zu fungieren. Aktivieren Sie sie daher. Es scheint notwendig zu sein, es zur Einstellungsdatei sysctl.d hinzuzufügen und zu laden, wenn es sich um einen Befehl handelt (openSUSE ist mit YaST auch über SSH einfach einzustellen).

# cat /proc/sys/net/ipv4/ip_forward
0
# vi /etc/sysctl.d/01-ipv4fwd.conf

conf:/etc/sysctl.d/01-ipv4fwd.conf


# Controls IP packet forwarding
net.ipv4.ip_forward = 1

Erweiterung der Netzwerkadapter im VPN-Bereich

Schalten Sie für die virtuelle Hyper-V-Maschine und den Raspberry Pi ** die Stromversorgung einmal aus **, um die IP-Übertragung zu aktivieren, und fügen Sie einen Netzwerkadapter hinzu. In meinem Fall hat Raspai einen kabelgebundenen LAN-Adapter für VPN über USB hinzugefügt, und Hyper-V hat in den Einstellungen einen Netzwerkadapter hinzugefügt.

Überprüfen Sie nach der Erweiterung, ob "eth1" hinzugefügt wurde, aber die IP-Adresse wurde natürlich noch nicht zugewiesen.

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [MAC-Adresse des Netzwerkadapters von Anfang an] brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.18/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 [IPv6-Adresse des Netzwerkadapters von Anfang an] scope global temporary dynamic
       valid_lft 14043sec preferred_lft 12243sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [MAC-Adresse des Nebenstellen-Netzwerkadapters] brd ff:ff:ff:ff:ff:ff
    inet6 [IPv6-Adresse des Nebenstellen-Netzwerkadapters] scope link noprefixroute
       valid_lft forever preferred_lft forever

# ip route

default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.18 metric 100

Nach dem Neustart wird der Befehl verwendet, um die IP-Weiterleitung zu aktivieren. Überprüfen Sie daher, ob er aktiviert ist (ip_forward ist 1).

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

# sysctl --system
…(Unterlassung)
* Applying /etc/sysctl.d/01-ipv4fwd.conf ...
net.ipv4.ip_forward = 1
…(Unterlassung)

Installieren Sie die zum Kompilieren von StrongSwan erforderlichen Pakete mit dem Befehl Distribution Standard Package

Hinweis: Wenn Sie es nicht ausführen, auch wenn es problematisch ist, wird eine Fehlermeldung angezeigt, dass kein Paket vorhanden ist und die Kompilierung gestoppt wird (´ • ω • ̥`).

Ubuntu20.04(Hyper-V/x64)


# apt-get -y install libgmp-dev libssl-dev

RaspberryPiOS(2020.08)


# apt-get -y install libgmp-dev libssl-dev

Installieren der StrongSwan 5.9.0-Quellkompilierung

Gemeinsam für virtuelle Hyper-V-Maschinen und Raspeye. Dieser Vorgang dauerte eine ganze Weile (besonders beim Raspberry Pi dauerte es 20-30 Minuten)

konfigurieren und machen

# cd [strongswan-5.9.0.tar.Verzeichnis, in dem sich gz befindet]
# tar xvzf strongswan-5.9.0.tar.gz
# cd strongswan-5.9.0/
# ./configure --prefix=/usr --sysconfdir=/etc --enable-openssl
# make
# make install

Wenn Sie fehlerfrei kompilieren können, ist die Installation abgeschlossen ♪ (\ * ˘︶˘ \ *) ...: \ * ♡

Starke Schwanpräferenzen

Wenn StrongSwan durch Quellkompilierung installiert wird, wird die Einstellungsdatei in /etc/ipsec.conf gespeichert und die Verbindungseinstellung von IPsec wird darin festgelegt.

[Apache Grundeinstellungen]
# vi /etc/ipsec.conf

Die Seite, die IPsec einrichtet (diejenige, die die Einrichtung sendet), ja, zuerst Ubuntu 20.04 von Hyper-V eingerichtet. Wie im Abschnitt "Serverbedingungen" beschrieben, lautet Ihre IP-Adresse auf der Seite des Hyper-V-Computers 192.168.1.18 und der Einrichtungspartner Raspberry Pi lautet 192.168.1.22. Schreiben Sie das Paar also in die Konfigurationsdatei.

"Links" schreibt die Informationen der Person, die die Einrichtung verhandelt, und "rechts" schreibt die Informationen der Person, die die Einrichtung einrichten soll (aus offizielles Handbuch von StrongSwan / ConnSection)))

Ubuntu20.04(Hyper-V/x64)


…
#Fügen Sie Folgendes hinzu
conn [Distinguished Name Beispiel: Linux-2-linux]
      authby=secret
      auto=start				#IPSec-Verhandlungen senden
      closeaction=restart
      dpdaction=restart
      left=192.168.1.18			#Links ist Ihr eigenes IPSec-Gateway
      leftid=192.168.1.18		#ID, die Sie identifiziert, um IPSec auszuhandeln
      leftsubnet=192.168.5.0/24
      right=192.168.1.22		#rechts ist das IPSec-Gateway der anderen Partei
      rightid=192.168.1.22		#ID, die den IPSec-Verhandlungspartner identifiziert
      rightsubnet=192.168.2.0/24
…

Übrigens habe ich für die ID in meinem Fall der Einfachheit halber die IP-Adresse verwendet, aber eine Zeichenfolge ist auch in Ordnung. Und da leftsubnet und rightsubnet die VPN-Bereiche sind, für die Sie und die andere Partei verantwortlich sind, ist leftsubnet Ihr eigener VPN-Bereich, also 192.168.5.0/24, und rightsubnet ist der Raspeye-VPN-Bereich der anderen Partei, also 192.168.2.0/ Ich habe 24 eingegeben.

Als nächstes setzen Sie die Raspeltorte. Wie im Abschnitt "Serverbedingungen" beschrieben, lautet die einzurichtende IP-Adresse 192.168.1.22 und das Hyper-V-Ubuntu 20.04 auf der anderen Seite 192.168.1.18, also Hyper-V (Ubuntu 20.04). ) Wird in die Einstellungsdatei geschrieben.

RaspberryPiOS(2020.08)


#Fügen Sie Folgendes hinzu
conn [Distinguished Name Beispiel: Linux-2-linux]
      authby=secret
      auto=add				#Erhalten Sie IPSec-Verhandlungen
      closeaction=clear
      dpdaction=clear
      left=192.168.1.22
      leftid=192.168.1.22
      leftsubnet=192.168.2.0/24
      right=192.168.1.18
      rightid=192.168.1.18
      rightsubnet=192.168.5.0/24

Der Punkt ist, dass durch Setzen von auto = add auf der Empfangsseite der IPSec-Einrichtungsverhandlung festgelegt wird und der Inhalt von links und rechts umgekehrt wird. Auf diese Weise können Sie eine IPSec-Verbindung herstellen, wenn die definierten Namen (die Zeichenfolge nach conn) übereinstimmen.

Standardmäßig verwendet StrongSwan die PSK-Methode und standardmäßig die AES / SHA-Verschlüsselungsmethode. Wenn andere Verschlüsselungsmethoden festgelegt werden müssen, legen Sie diese separat fest, lassen Sie sie hier jedoch weg.

Abgesehen davon ist StrongSwan zu diesem Zeitpunkt NAT-T-kompatibel, und IPSec kann auf NAT angewendet werden (in der Vergangenheit konnte IPSec nicht auf NAT angewendet werden), sodass NAT im Internet verwendet wird. Es scheint, dass mit StrongSwan erstellte VPNs selbst in dem verwendeten Bereich über das Internet kommunizieren können (obwohl ich noch nie damit experimentiert habe ...).

[Starke Swan-Schlüsseleinstellungen]
# vi /etc/ipsec.secrets

/etc/ipsec.secrets


…
: PSK "[Geeignete Zeichenfolge: Beispiel ... kazumi75kitty]"
…

Da wir die Standard-PSK-Methode verwenden, werden wir sie sowohl für virtuelle Hyper-V-Maschinen als auch für Raspeye gleich machen.

Starke Schwäne starten

Erstellen und aktivieren Sie das Dienststart-Skript

Nachdem wir die erforderlichen Umgebungseinstellungen für StrongSwan haben, möchten wir es starten können. Da das Startskript Systemd ist, erstellen Sie es in / etc / systemd / system

# cd /etc/systemd/system
# vi strongswan.service

strongswan.service


[Unit]
Description=strongSwan

[Service]
Type=forking
ExecStart=/usr/sbin/ipsec start
ExecStop=/usr/sbin/ipsec stop

[Install]
WantedBy=multi-user.target

Ich werde hier nicht näher auf Systemd-Skripte eingehen, aber in strongSwan wird der Diensttyp verzweigt, da das Starten und Stoppen im Hintergrund des übergeordneten Prozesses erfolgt.

ufw Einstellungen

ufw akzeptiert auch IPSec, genau wie Firewalld. Die von ipsec verwendeten Ports sind 500/4500 TCP / UDP-Portnummern und das AH / ESP-Protokoll. Mit den Einstellungen hier ist jedoch die interne Einschränkung von 192.168.1.0/24 nicht angegeben, und wenn IPSec-Pakete von anderen Netzwerksegmenten übertragen werden können, können sie empfangen werden. Wenn Sie jedoch bis zu diesem Punkt Maßnahmen ergreifen, wird dies kompliziert. Der Einfachheit halber erlauben wir nur IPSec.

# ufw allow 500
# ufw allow 4500
# ufw allow to any proto ah
# ufw allow to any proto esp
# ufw status numbered

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 30303/tcp                  ALLOW IN    192.168.1.0/24
[ 2] 5900:5999/tcp              ALLOW IN    192.168.1.0/24
[ 3] 500                        ALLOW IN    Anywhere
[ 4] 4500                       ALLOW IN    Anywhere
[ 5] Anywhere/esp               ALLOW IN    Anywhere/esp
[ 6] Anywhere/ah                ALLOW IN    Anywhere/ah
[ 7] 500 (v6)                   ALLOW IN    Anywhere (v6)
[ 8] 4500 (v6)                  ALLOW IN    Anywhere (v6)
[ 9] Anywhere/esp (v6)          ALLOW IN    Anywhere/esp (v6)
[10] Anywhere/ah (v6)           ALLOW IN    Anywhere/ah (v6)

Dieser Befehl gilt sowohl für virtuelle Hyper-V-Maschinen als auch für Raspeye.

Starten und überprüfen Sie den Betrieb

Fangen wir an. Beginnen Sie immer mit Aktivieren Aktivieren und bestätigen Sie, dass der Status "Aktiv" und "Wird ausgeführt" lautet.

** Zuerst wird StrongSwan von der Seite gestartet, die die IPSec-Einrichtungsverhandlung empfängt, und dann wird es in der Reihenfolge der Seite gestartet, die die IPSec-Einrichtung sendet **. Hier wird nach dem Starten von StrongSwan von Raspeye die virtuelle Maschine von StrongSwan von Hyper-V gestartet.

# systemctl start strongswan
# systemctl enable strongswan
# systemctl status strongswan

Überprüfen Sie, ob die virtuelle Hyper-V-Maschine und Raspeye auf "Aktiv" und "Wird ausgeführt" eingestellt sind, und überprüfen Sie schließlich, ob das IPSec-Tunneling eingerichtet ist.

Ubuntu20.04(Hyper-V/x64)


# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.18[192.168.1.18]...192.168.1.22[192.168.1.22]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.5.0/24 === 192.168.2.0/24

# ip xfrm policy
src 192.168.5.0/24 dst 192.168.2.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel

RaspberryPiOS(2020.08)


# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.22[192.168.1.22]...192.168.1.18[192.168.1.18]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.2.0/24 === 192.168.5.0/24

# ip xfrm policy
src 192.168.2.0/24 dst 192.168.5.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel

Das IPSec-Tunneling wurde erfolgreich mit virtuellen Hyper-V-Maschinen und Raspetorte (˶ ・ ᴗ ・) ੭⚐⚑ eingerichtet

Bonus (Geben Sie eine Zeichenfolge wie Domain für die ID von ipsec.conf an.)

Selbst wenn Sie in der StrongSwan-Konfigurationsdatei /etc/ipsec.conf eine Zeichenfolge anstelle einer IP-Adresse mit leftid oder rightid verwenden, wird der Erfassungsbildschirm angezeigt (\ * ´꒳` \ *).

Vielleicht ist dieser leichter zu verstehen. Der Bildschirm ist CentOS + openSUSE, aber ich denke, dass der Vorgang für Ubuntu usw. der gleiche ist. Im Beispiel werden "Himbeer-Pi" und "Nur Test @ Kazumi-Marmelade" unterschieden. ipsec.confのIDに文字列やドメインを指定する

Ergänzung (wenn IPSec-Tunneling über NAT erfolgt)

Ich habe noch kein leicht verständliches Bild, aber geben Sie für die linke und rechte IP-Adresse in ipsec.conf Ihre eigene IP-Adresse und die IP-Adresse des anderen Teilnehmers nach der NAT-Konvertierung ein, wie Sie sehen. In diesem Fall müssen die linke und die rechte ID immer übereinstimmen.

Beispiel: 192.168.1.0/24 → Wenn 192.168.120.0/28 von NAT partitioniert wird

IPsecGW-1 (innerhalb von 192.168.1.0/24)  left=192.168.1.22  leftid="gw1"  right=192.168.1.18  rightid="gw2" IPsecGW-2 (innerhalb von 192.168.120.0/28)  left=192.168.120.1  leftid="gw2"  right=192.168.120.3  rightid="gw1"

Auf diese Weise kann IPsec durch Eingabe einer IP-Adresse eingerichtet werden, die NAT berücksichtigt. Weitere Details werde ich jedoch später veröffentlichen.

nächstes Mal

Mit der Einführung von Strong Swan wurde der Bau des IPsec-Gateways unter Ubuntu 20.04 unter Raspberry Pi und Hyper-V sowie unter CentOS abgeschlossen. Verbinden Sie als Nächstes auch unter Ubuntu den Client und den Server mit dem mit dem IPSec-Gateway verbundenen VPN und versuchen Sie, eine Verbindung untereinander herzustellen (˶˙ᵕ˙˶).

Recommended Posts

Einfacher VPN-Aufbau eines IPSec-Gateways mit Ubuntu 20.04 und Raspberry Pi ―― 1. StrongSwan eingeführt
Einfacher VPN-Aufbau eines IPSec-Gateways mit CentOS 8 und openSUSE (Raspberry Pi) --1 Einführung von StrongSwan
Einfacher VPN-Aufbau eines IPSec-Gateways mit Ubuntu 20.04 und Raspberry Pi - 2 StrongSwan VPN-Verbindungsbestätigung
Erstellen Sie ein IPSec-Gateway-VPN mit CentOS 8 und openSUSE (Raspberry Pi) - 2 StrongSwan VPN-Verbindungsbestätigung
Aufbau eines VPN-Servers mit Raspberry Pie
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Grafische Darstellung des Stromverbrauchs im Haushalt mit 3GPI und Raspeye
Haustierüberwachung mit Rekognition und Raspberry pi
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts
Ich habe die Beleuchtungsstärke des Raumes mit Raspberry Pi, Arduino und einem optischen Sensor getwittert
Ich habe versucht, mit Raspberry Pi 4 eine Umgebung von Ubuntu 20.04 LTS + ROS2 zu erstellen
MQTT Radicon Car mit Arduino und Himbeere
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Messen Sie die CPU-Temperatur von Raspeye mit Python
Wichtige Punkte zum Erstellen von LiveUSB in Ubuntus "VPN- und Remmina-Verbindungseinstellungen" (vorläufige Version)
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 4: Erstellen eines NFS-Servers und Importieren eines Client-Betriebssystems)
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Installation von Docker auf Raspberry Pi und L Chika
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 7: Einstellung der TFTP-Route und Starttest für jeden Raspetorte)
GPGPU mit Raspberry Pi
DigitalSignage mit Raspberry Pi
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
Aufbau einer Cortex-M-Entwicklungsumgebung für TOPPERS mit Raspeye
Bilderkennung von Müll mit Edge (Raspberry Pi) aus null Wissen mit AutoML Vsion und TPU