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
--IPST-Programm: StrongSwan 5.9.0 (Quellensammlung)
IPST-Verhandlungsempfangs-Gateway (links in der Abbildung unten, Raspberry Pi):
Internet-Seite (eth0): 192.168.1.22
VPN-Bereichsseite (eth1): 192.168.2.1
IPTI Negotiation Originator Gateway (rechts in der Abbildung unten, Ubuntu 20.04):
Internet-Seite (eth0): 192.168.1.18
VPN-Bereichsseite (eth1): 192.168.5.1
Netzwerksegment:
Internetverbindung möglich: 192.168.1.0/24
Himbeer-Pi (Empfangsseite der Verhandlung links in der Abbildung) Sicheres Segment: 192.168.2.0/24 --Ubuntu 20.04 (Anrufer der Verhandlungen rechts in der Abbildung) Sicheres Segment: 192.168.5.0/24
IPST-Bereich bezogen: --Tonneling-Abschnitt: Zwischen 192.168.1.22 und 192.168.1.18
VPN-Zusammenarbeit: VPN-Verbindung von 192.168.2.0/24 bis 192.168.5.0/24
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.
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
Ubuntu20.04(Hyper-V/x64)
# apt-get -y install gcc build-essential
RaspberryPiOS(2020.08)
# apt-get -y install gcc build-essential
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
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
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)
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
Gemeinsam für virtuelle Hyper-V-Maschinen und Raspeye. Dieser Vorgang dauerte eine ganze Weile (besonders beim Raspberry Pi dauerte es 20-30 Minuten)
# 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 ♪ (\ * ˘︶˘ \ *) ...: \ * ♡
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.
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 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.
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
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.
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.
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