La dernière fois, j'ai construit une passerelle IPsec avec la compilation source StrongSwan avec CentOS 8 + Raspeye openSUSE. J'ai essayé de le faire avec Ubuntu 20.04 et Raspberry Pi OS (˶ ・ ᴗ ・) ੭⚐⚑
--Programme IPST: StrongSwan 5.9.0 (compilation des sources) --Récepteur de négociation IPST: Raspberry Pi 3B + / Raspberry Pi OS (version 2020/08) (armhf (v7), 32 bits)
--Passerelle d'origine de la négociation IPTI (à droite de la figure ci-dessous, Ubuntu 20.04):
Côté Internet (eth0): 192.168.1.18
Côté de la zone VPN (eth1): 192.168.5.1
Segment de réseau:
Connexion Internet possible: 192.168.1.0/24 --Raspberry Pi (côté réception de la négociation à gauche de la figure) Segment sécurisé: 192.168.2.0/24 --Ubuntu 20.04 (Appelant des négociations à droite de la figure) Segment sécurisé: 192.168.5.0/24
Domaine IPST lié:
Section de raccordement: Entre 192.168.1.22 et 192.168.1.18
Coopération VPN: connexion VPN de 192.168.2.0/24 à 192.168.5.0/24
Les autres packages requis sont installés à l'aide des commandes de package standard de la distribution (dnf, apt, etc.) et n'ont pas besoin d'être téléchargés individuellement.
Pour le téléchargement, vous pouvez accéder au site officiel, le télécharger à partir de là et le transférer par FTP, ou vous pouvez l'obtenir avec wget si vous connaissez l'URL du fichier à télécharger, mais la méthode d'acquisition est omise.
Installez chaque distribution avec la machine virtuelle Hyper-V et Raspeye (la compilation source est la même pour les deux)
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
J'ai installé le zlib avec l'emplacement par défaut. La compilation source est la même pour les machines virtuelles Hyper-V et Raspeye
# cd [Répertoire où se trouvent les fichiers d'archive zlib]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install
Le transfert IP doit être activé pour fonctionner comme une passerelle IPsec, alors activez-le. Il semble qu'il soit nécessaire de l'ajouter au fichier de configuration sysctl.d et de le charger s'il s'agit d'une commande (openSUSE est gentiment facile à configurer avec YaST même à partir de SSH)
# 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
Pour la machine virtuelle Hyper-V et le Raspberry Pi, ** Éteignez l'alimentation une fois ** pour activer le transfert IP + ajoutez un adaptateur réseau. Dans mon cas, Raspai a ajouté un adaptateur LAN filaire pour VPN via USB, et Hyper-V a ajouté un adaptateur réseau dans les paramètres.
Après l'expansion, vérifiez si "eth1" est ajouté, mais bien sûr, l'adresse IP n'a pas encore été attribuée.
# 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 [Adresse MAC de l'adaptateur réseau depuis le début] 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 [Adresse IPv6 de la carte réseau depuis le début] 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 [Adresse MAC de l'adaptateur réseau d'extension] brd ff:ff:ff:ff:ff:ff
inet6 [Adresse IPv6 de l'adaptateur réseau d'extension] 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
Après le redémarrage, la commande est utilisée pour activer le transfert IP, vérifiez donc s'il est activé (ip_forward vaut 1).
# cat /proc/sys/net/ipv4/ip_forward
1
# sysctl --system
…(Omission)
* Applying /etc/sysctl.d/01-ipv4fwd.conf ...
net.ipv4.ip_forward = 1
…(Omission)
Remarque: Si vous ne l'exécutez pas même si c'est gênant, vous obtiendrez une erreur indiquant qu'il n'y a pas de paquet et la compilation sera arrêtée (´ • ω • ̥`)
Ubuntu20.04(Hyper-V/x64)
# apt-get -y install libgmp-dev libssl-dev
RaspberryPiOS(2020.08)
# apt-get -y install libgmp-dev libssl-dev
Commun aux machines virtuelles Hyper-V et à Raspeye. Ce processus a pris un certain temps (surtout avec le Raspberry Pi, cela a pris 20-30 minutes)
# cd [strongswan-5.9.0.tar.Répertoire où se trouve gz]
# tar xvzf strongswan-5.9.0.tar.gz
# cd strongswan-5.9.0/
# ./configure --prefix=/usr --sysconfdir=/etc --enable-openssl
# make
# make install
Si vous pouvez compiler sans erreur, l'installation est terminée ♪ (\ * ˘︶˘ \ *) ...: \ * ♡
Lorsque StrongSwan est installé par compilation source, le fichier de configuration est stocké dans /etc/ipsec.conf et les paramètres de connexion IPsec y sont définis.
[Paramètres de base d'Apache]
# vi /etc/ipsec.conf
Du côté qui établit IPsec (celui qui envoie l'établissement), oui, d'abord, installez Ubuntu 20.04 d'Hyper-V. Comme décrit dans la section "Conditions du serveur", du côté machine Hyper-V, votre adresse IP sera 192.168.1.18 et le partenaire d'établissement Raspberry Pi sera 192.168.1.22, alors écrivez la paire dans le fichier de configuration.
"Left" écrit les informations de la personne qui négocie l'établissement, et "right" écrit les informations de la personne à établir (à partir du manuel officiel StrongSwan / ConnSection)))
Ubuntu20.04(Hyper-V/x64)
…
#Ajoutez ce qui suit
conn [Nom distinctif Exemple: linux-2-linux]
authby=secret
auto=start #Envoyer des négociations IPsec
closeaction=restart
dpdaction=restart
left=192.168.1.18 #à gauche se trouve votre propre passerelle IPsec
leftid=192.168.1.18 #ID qui vous identifie pour négocier IPsec
leftsubnet=192.168.5.0/24
right=192.168.1.22 #à droite est la passerelle IPsec de l'autre partie
rightid=192.168.1.22 #ID qui identifie le partenaire de négociation IPsec
rightsubnet=192.168.2.0/24
…
Au fait, pour l'ID, j'ai utilisé l'adresse IP pour plus de simplicité dans mon cas, mais une chaîne de caractères est également OK. Et comme leftsubnet et rightsubnet sont les zones VPN dont vous et l'autre partie êtes responsables, leftsubnet est votre propre zone VPN, donc 192.168.5.0/24, et rightsubnet est la zone VPN Raspeye de l'autre partie, donc 192.168.2.0/ J'ai mis 24.
Ensuite, définissez la tarte aux râpes. Comme décrit dans la section "Conditions du serveur", votre adresse IP à établir sera 192.168.1.22, et Hyper-V Ubuntu 20.04 de l'autre partie à établir sera 192.168.1.18, donc Hyper-V (Ubuntu 20.04) ) Est écrit dans le fichier de paramètres.
RaspberryPiOS(2020.08)
#Ajoutez ce qui suit
conn [Nom distinctif Exemple: linux-2-linux]
authby=secret
auto=add #Recevoir les négociations IPsec
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
Le fait est qu'en définissant auto = add, il est défini du côté réception de la négociation d'établissement IPsec et le contenu de gauche et de droite est inversé. De cette façon, si les noms distinctifs (la chaîne après conn) correspondent, vous pouvez établir une connexion IPsec.
Par défaut, StrongSwan utilise la méthode PSK et utilise la méthode de chiffrement AES / SHA en standard. S'il est nécessaire de définir d'autres méthodes de chiffrement, définissez-les séparément, mais omettez-les ici.
En passant, StrongSwan à ce stade est compatible NAT-T, et IPsec peut être appliqué au NAT (dans le passé, IPsec ne pouvait pas être appliqué au NAT), donc NAT est utilisé sur Internet. Il semble que même l'espace utilisé peut communiquer sur Internet avec un VPN construit avec StrongSwan (même si je ne l'ai jamais expérimenté ...).
[Paramètres de clé Strong Swan]
# vi /etc/ipsec.secrets
/etc/ipsec.secrets
…
: PSK "[Chaîne appropriée: Exemple ... kazumi75kitty]"
…
Puisque nous utilisons la méthode PSK par défaut, nous la rendrons identique pour les machines virtuelles Hyper-V et Raspeye.
Maintenant que nous avons les paramètres d'environnement nécessaires pour StrongSwan, nous aimerions pouvoir le démarrer. Puisque le script de démarrage est Systemd, créez-le dans / 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
Je n'entrerai pas dans les détails des scripts Systemd ici, mais dans strongSwan, le type de service est forking car le démarrage et l'arrêt se font en arrière-plan à partir du processus parent.
ufw accepte également IPsec, tout comme firewalld. Les ports utilisés par ipsec sont les numéros de port TCP / UDP 500/4500 et le protocole AH / ESP. Cependant, avec les paramètres ici, il ne spécifie pas la limitation interne de 192.168.1.0/24 pour le tunneling, et si les paquets IPsec peuvent passer d'autres segments de réseau, ils peuvent être reçus. Cependant, si vous prenez des mesures jusque-là, ce sera compliqué, donc pour des raisons de simplicité, nous n'autoriserons qu'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)
Cette commande est commune aux machines virtuelles Hyper-V et à Raspeye.
Commençons. Commencez toujours par activer Activer et confirmez que l'état est «Actif» et «En cours d'exécution».
** Tout d'abord, StrongSwan est démarré du côté qui reçoit la négociation d'établissement IPsec, puis il est démarré dans l'ordre du côté qui envoie l'établissement IPsec **. Ici, après le démarrage de StrongSwan de Raspeye, StrongSwan de la machine virtuelle Hyper-V est démarré.
# systemctl start strongswan
# systemctl enable strongswan
# systemctl status strongswan
Vérifiez que la machine virtuelle Hyper-V et Raspeye sont définies sur "Actif" et "En cours d'exécution", et enfin vérifiez si le tunneling IPsec est établi.
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
Le tunnel IPsec a été établi avec succès avec les machines virtuelles Hyper-V et la tarte aux râpes (˶ ・ ᴗ ・) ੭⚐⚑
Dans le fichier de configuration StrongSwan /etc/ipsec.conf, même si vous utilisez une chaîne de caractères au lieu d'une adresse IP avec leftid ou rightid, l'écran de capture sera affiché (\ * ´꒳` \ *)
Peut-être que celui-ci est plus facile à comprendre. L'écran est CentOS + openSUSE, mais je pense que le fonctionnement est le même pour Ubuntu etc. Dans l'exemple, "raspberry pi" et "test uniquement @ kazumi-jam" sont distingués.
Je n'ai pas encore d'image facile à comprendre, mais pour les adresses IP gauche et droite dans ipsec.conf, entrez votre propre adresse IP et l'adresse IP de l'autre partie après la conversion NAT telle que vue de vous. À ce moment-là, il est nécessaire que l'identifiant gauche et l'identifiant droit correspondent par paires.
Exemple: 192.168.1.0/24 → Lorsque 192.168.120.0/28 est partitionné par NAT
IPsecGW-1 (dans 192.168.1.0/24) left=192.168.1.22 leftid="gw1" right=192.168.1.18 rightid="gw2" IPsecGW-2 (dans 192.168.120.0/28) left=192.168.120.1 leftid="gw2" right=192.168.120.3 rightid="gw1"
De cette façon, IPsec peut être établi en entrant une adresse IP qui prend en compte NAT, mais je posterai plus de détails plus tard.
Avec l'introduction de Strong Swan, la construction de la passerelle IPsec est terminée sur Ubuntu 20.04 sur Raspberry Pi et Hyper-V ainsi que sur CentOS. Ensuite, même sous Ubuntu, connectez le client et le serveur au VPN connecté à la passerelle IPsec et essayez de vous connecter l'un à l'autre (˶˙ᵕ˙˶)
Recommended Posts