Crmgo Blog

Openswan, Konfiguration „Server - Client“

Openswan, Konfiguration „Server - Client“

Innerhalb des Containers verwenden wir als IPsec-Daemon OpenSwan und als L2TP-Server den Standard-XL2TPD aus den Repositories: Als Nächstes konfigurieren wir das Forwarding und den Rest des Netzwerksubsystems für ein korrektes Zusammenspiel mit NAT und VPN: Wir beginnen mit der Konfiguration des IPsec-Daemons. Hier ist die Konfiguration…

Openswan, Konfiguration „Server - Client“

Als IPsec-Dämon innerhalb des Containers verwenden wir OpenSwan und als L2TP-Server den Standard-XL2TPD aus den Repositories:

apt-get install openswan xl2tpd

Im nächsten Schritt konfigurieren wir das Forwarding und den Rest des Netzwerksubsystems für ein korrektes Zusammenspiel mit NAT und VPN:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source <main IP of server>
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
for each in /proc/sys/net/ipv4/conf/*; do echo 0 > $each/accept_redirects; echo 0 > $each/send_redirects; done

Wir beginnen mit der Konfiguration des IPsec-Dämons.

Wir passen die Konfiguration /etc/ipsec.conf wie folgt an:

config setup
  protostack=netkey
  nat_traversal=yes                          # Enables NAT traversal
  virtual_private=%v4:192.168.1.0/8          # with this option you can add your local IP in NAT
conn L2TP-PSK-NAT
  rightsubnet=vhost:%priv
  also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
  authby=secret                              # Auth with PSK ( preshared key )
  pfs=no
  auto=add                                   
  keyingtries=3
  rekey=no
  ikelifetime=8h
  salifetime=10m
  type=tunnel                                # type of l2tp connection ( tunnel / transport )
  left=11.11.11.11                         # left - is internet IP of l2tp server
  leftprotoport=17/1701
  right=%any                                 # right - is IP of client ( if client NATed , that IP of client is IP in NAT )
  rightprotoport=17/1701

Die wichtigsten Aspekte der Konfiguration sind kommentiert. Es ist auch wichtig, die Konfiguration genau so zu erstellen, wie oben angegeben, d. h. mit Beibehaltung der Leerzeichen am Zeilenanfang bei den Befehlen, bei denen diese angegeben sind, da die Einrückung des Befehls vom Daemon an den Block gebunden ist, der durch das nicht eingerückte „conn“ definiert wird.

Jetzt konfigurieren wir die Authentifizierung für die Arbeit mit IPsec. Es gibt zwei Authentifizierungsmethoden – per Zertifikat und per Schlüssel (PSK). In diesem Beispiel konfigurieren wir die Authentifizierung per Schlüssel in der Datei /etc/ipsec.secrets:

11.11.11.11 %any: PSK "mykey"

11.11.11.11 – dies ist die externe IP-Adresse unseres Servers
%any – dies ist eine integrierte Variable, die jede IP-Adresse bezeichnet
PSK – Authentifizierungsmethode (kann RSA sein)
„mykey“ – der geheime Schlüssel zur Authentifizierung, der an den Client übermittelt werden muss.

Nun ist es an der Zeit, den L2TP-Server zu konfigurieren. Er wird über das PPP-Protokoll arbeiten.

Wir passen die Konfiguration /etc/xl2tpd/xl2tpd.conf wie folgt an:

[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets        # auth file with pars login/password for l2tp auth
[lns default]
ip range = 10.0.0.2-10.0.0.200              # range of IP's , that give to clients when auth is good
local ip = 10.0.0.1                        
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = no                                        # debug mode
pppoptfile = /etc/ppp/options.xl2tpd        #  this is ppp options config file
length bit = yes
exclusive = no
assign ip = yes
name = VPN-Server

Auch in dieser Konfiguration sind alle kritischen Stellen kommentiert, der Rest ist intuitiv verständlich. Bei der Serverkonfiguration müssen die Kommentare aus der Konfiguration entfernt werden.

Wir konfigurieren die L2TP-Authentifizierungsdatei – /etc/xl2tpd/l2tp-secrets. In der Datei erlauben wir allen Verbindungen, da unser L2TP über PPP arbeitet, verwenden wir daher die PPP-Authentifizierung.

# Secrets for authenticating l2tp tunnels
# us    them    secret
# *             marko blah2
# zeus          marko   blah
# *     *       interop
*       *       *   # let all , because we use auth with ppp

Als Nächstes konfigurieren wir die PPP-Konfiguration, die von unserem L2TP-Dämon angefordert wird (/etc/ppp/options.xl2tpd):

refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

Falls Probleme mit der Verbindung oder dem Anschluss auftreten, können Sie zur Fehlersuche einfach „#debug“ auskommentieren und im Systemprotokoll /var/log/syslog nach Fehlern suchen.

Wir konfigurieren die Authentifizierung in PPP (/etc/ppp/chap-secrets):

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
test2   l2tpd   test    *

Benutzername – test2
Server, für den dieses Paar zur Authentifizierung gültig ist – l2tpd
Passwort – test
Clients von allen IP-Adressen können sich mit diesem Passwort anmelden – *

Wir starten beide Dienste neu:

/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart

Nun prüfen wir die korrekte Funktion der IPsec-Module innerhalb des Containers:

ipsec verify

Die Ausgabe eines funktionsfähigen IPsec sieht etwa so aus:

root@XXX:~# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.37-g955aaafb-dirty/K2.6.32-042stab084.10 (netkey)
Checking for IPsec support in kernel                            [OK]
 SAref kernel support                                           [N/A]
 NETKEY:  Testing XFRM related proc values                      [OK]
        [OK]
        [OK]
Checking that pluto is running                                  [OK]
 Pluto listening for IKE on udp 500                             [OK]
 Pluto listening for NAT-T on udp 4500                          [OK]
Checking for 'ip' command                                       [OK]
Checking /bin/sh is not /bin/dash                               [WARNING]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support    

Nun konfigurieren wir den Windows 7-Client für die Verbindung zu unserem VPN L2TP mit IPsec-Verschlüsselung.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.

Kategorien: VPN