OpenVPN und DD-WRT

OpenVPN und DD-WRT

Ich versuche, einen neuen DD-WRT-Router für die Verwendung mit OpenVPN einzurichten. Das OpenVPN, das ich verwenden muss, verfügt jedoch über eine automatisch generierte Konfigurationsdatei. Diese sieht folgendermaßen aus:

# Automatically generated OpenVPN client config file
# Generated on Wed Sep 11 17:15:39 2013 by ip-10-164-12-159
# Note: this config file contains inline private keys
#       and therefore should be kept confidential!
# Note: this configuration is user-locked to the username below
# OVPN_ACCESS_SERVER_USERNAME=openvpn
# Define the profile name of this particular configuration file
# OVPN_ACCESS_SERVER_PROFILE=-redacted-
# OVPN_ACCESS_SERVER_CLI_PREF_ALLOW_WEB_IMPORT=True
# OVPN_ACCESS_SERVER_CLI_PREF_ENABLE_CONNECT=True
# OVPN_ACCESS_SERVER_CLI_PREF_ENABLE_XD_PROXY=True
# OVPN_ACCESS_SERVER_WSHOST=-redacted-
# OVPN_ACCESS_SERVER_WEB_CA_BUNDLE_START
# -----BEGIN CERTIFICATE-----
# -redacted-
# -----END CERTIFICATE-----
# OVPN_ACCESS_SERVER_WEB_CA_BUNDLE_STOP
# OVPN_ACCESS_SERVER_IS_OPENVPN_WEB_CA=0
# OVPN_ACCESS_SERVER_ORGANIZATION=OpenVPN Technologies, Inc.
setenv FORWARD_COMPATIBLE 1
client
proto udp
nobind
remote -redacted-
port 443
dev tun
dev-type tun
ns-cert-type server
reneg-sec 604800
sndbuf 100000
rcvbuf 100000
auth-user-pass
# NOTE: LZO commands are pushed by the Access Server at connect time.
# NOTE: The below line doesn't disable LZO.
comp-lzo no
verb 3
setenv PUSH_PEER_INFO

<ca>
-----BEGIN CERTIFICATE-----
-redacted-
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
-redacted-
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
-redacted-
-----END PRIVATE KEY-----
</key>

key-direction 1
<tls-auth>
#
# 2048 bit OpenVPN static key (Server Agent)
#
-----BEGIN OpenVPN Static key V1-----
-redacted-
-----END OpenVPN Static key V1-----
</tls-auth>

Wenn ich per SSH auf meinen Router zugreife (das heißt, ich habe SSHD eingeschaltet), kann ich diese Konfiguration verwenden, um eine Verbindung zum OpenVPN-Server herzustellen. Wenn ich mir die VPN-Server-Zugriffskontrollseite anschaue, wird angezeigt, dass ich erfolgreich eine Verbindung hergestellt habe. Ich glaube jedoch, dass die Routing-Tabelle des DD-WRT keinen Datenverkehr vom WLAN-Gerät an das VPN sendet.

Ich bin ein Neuling im Routing und konnte mit keinem der dd-wrt-Tutorials arbeiten (sie gehen alle davon aus, dass Sie eine andere Art von Konfiguration verwenden, die ich nicht verwenden kann). Daher besteht meine Frage aus zwei Teilen:

  1. Kann mir jemand dabei helfen, iptables (oder was auch immer den Datenverkehr vom WLAN-Netzwerkgerät sendet) skriptfähig einzurichten, sodass ich das iptables-Skript ausführen und dann OpenVPN auf dem Router starten kann?

  2. Wie ändere ich dies, damit es nur auf einem VAP (virtueller Zugriffspunkt) oder nur mit bestimmten IP-Adressen funktioniert (so dass nur das Gerät mit der IP xxxx, das mit dem AP verbunden ist, durch das VPN geht).

Hinweis: Normalerweise habe ich diese Skripte gerne auf meinem Computer, führe sie dann per SSH auf den in der Nähe befindlichen DD-WRT-Router aus und führe sie dann aus, um eine VPN-Verbindung zu öffnen.

Die Suche nach Google und dieser Site hat mir bisher nicht viel geholfen.

Antwort1

Ich spreche hauptsächlich über meine Pläne, mein OpenVPN-Setup zu Hause auf OpenWRT umzustellen. Es ist derzeit auf Fedora18 implementiert, aber ich möchte die Testmaschine für andere Dinge verwenden. Ich könnte mir vorstellen, dass DD-WRT ähnlich ist, aber es kann aufgrund von Implementierungsschwierigkeiten einige Ungenauigkeiten geben. Hoffentlich kann mich jemand mit mehr DD-WRT-Erfahrung unterstützen und etwaige Unebenheiten ausbügeln.

Die dev tunDirektive bedeutet, dass Sie ein separates Subnetz verwenden, das normalerweise mit der serverDirektive festgelegt wird (ich vermute, dass dieser Teil auf der VPN-Verwaltungsseite behandelt wird). Beispielsweise server 10.0.0.0 255.255.255.0würde bedeuten, dass Ihren Clients auf dem virtuellen Adapter ihres Clients eine Adresse innerhalb dieses Bereichs zugewiesen würde.

Wenn dieses Gerät Ihr Internet-Router ist, wird es als Standard-Gateway für Ihr Netzwerk verwendet. Wenn auf Ihrem drahtlosen Gerät keine statische Route für ein bestimmtes Netzwerk festgelegt ist, fragt es das Standard-Gateway ab. Ich vermute, dass Ihre iptables-Regeln nicht so eingestellt sind, dass sie basierend auf der Eingabeschnittstelle nach Datenverkehr aus Ihrem VPN-Subnetz suchen und diesen akzeptieren.

Sie können Ihre iptables-Konfiguration mit anzeigen iptables -nvL --line-numbers. Wenn Sie Ihr Gerät als Router verwenden möchten, wird Ihnen ungefähr Folgendes angezeigt.

  1. Akzeptieren Sie bestehende Verbindungen.
  2. Akzeptieren Sie Verbindungen zu lokalen Adressen aus dem Internet entsprechend den von Ihnen eingerichteten Portweiterleitungsregeln.
  3. Akzeptieren Sie Datenverkehr aus dem lokalen Subnetz.
  4. Alle verbleibenden Versuche, die die Regelkette überschreiten, verwerfen/ablehnen.

Wenn Ihr OpenVPN-Subnetz in Phase 3 nicht erwähnt wird, gelangt es in Phase 4 und wird gelöscht.

Diese Prozeduren sind übersichtlich in Regelketten organisiert, die auf Aufgaben basieren. Ich habe vor, am Anfang von „zone_lan_forward“, der Regelkette, die lokale Verbindungen verwaltet, eine Kette für meine OpenVPN-Subnetze zu definieren. Sie sieht ungefähr so ​​aus:

iptables -N zone_lan_vpn

iptables -I zone_lan_forward -i tun+ -j zone_lan_vpn

Was Sie als Nächstes tun, hängt davon ab, welche Art von Einschränkungen Sie auf diese Clients anwenden möchten. Ich habe drei verschiedene OpenVPN-Instanzen (eine administrative und zwei Ebenen mit Gastzugriff), daher habe ich dies noch etwas weiter unterteilt.

Benutzern im administrativen VPN-Subnetz wird Zugriff auf fast alles gewährt, daher habe ich ein DENY->ALLOW-Setup implementiert, das nur die spezifischen Adressen sperrt, die nicht im Menü stehen, bevor alles andere akzeptiert wird. Gästen wird nur Zugriff auf bestimmte Ressourcen gewährt, daher ist für sie ein ALLOW->DENY-Setup vorgesehen.

Der Teil, bei dem ich mir bei DD-WRT nicht sicher bin, ist, wie ich es so einrichten kann, dass es automatisch beim Booten geschieht. In OpenWRT werden Firewall-Regeln basierend auf Skripten (die nicht manipuliert werden sollten) in generiert /lib/firewall. Die Konfigurationsdatei /etc/config/firewallenthält die folgenden Zeilen:

config 'include'

option 'path' '/etc/firewall.user'

Die /etc/firewall.useroben definierte Datei wird als BASH-Skript gelesen, wenn die Firewall-Regeln neu geladen werden, um benutzerspezifische Anpassungen zu ermöglichen. Ich bin nicht speziell mit DD-WRT vertraut und bin mir daher nicht sicher, ob dieselbe Methode zum Einrichten der Firewall verwendet wird.

Wenn Ihre Firewall-Regeln auf den DD-WRT-Standard eingestellt sind, könnten Sie die Ausgabe von iptables -nvL --line-numbersauf Pastebin oder Ähnlichem posten, wobei Ihre öffentliche Adresse geschwärzt ist? Das würde mir helfen, mir ein besseres Bild vom spezifischen Layout von DD-WRT zu machen. Können Sie die IP-Adresse im OpenVPN-Subnetz bestätigen, die der Remote-Client erhält? Könnten Sie auch die Routing-Tabelle Ihres Routers posten, wie sie in den Ergebnissen von angezeigt wird route -n? (Stellen Sie sicher, dass der OpenVPN-Server läuft, während Sie dies tun). Wenn Sie Netzwerkadressen hiervon schwärzen, geben Sie bitte an, was der Zweck des Bereichs war (z. B. lokales Subnetz, VPN-Subnetz, öffentlich).

Natürlich könnte das alles hinfällig werden, wenn es eine Option zum Definieren dieses Zugriffs in der Weboberfläche gibt. Gibt es in der Webkonsole Ihres Routers eine Option zum Filtern von Benutzern im OpenVPN-Subnetz?

Teil zwei deiner Frage verstehe ich leider nicht ganz. Möchtest du, dass sich nur bestimmte IP-Adressen über OpenVPN mit dem Gerät verbinden können? Möchtest du, dass dieser Dienst zukünftig auf einem anderen Server als deinem DD-WRT-Router liegt?

verwandte Informationen