PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : openvpn auf debian eingerichtet, probleme mit iptables und routing



krutt
03.05.11, 09:41
hallo liebe linuxforen gemeinde,

lange profitiere ich schon von euch, da mich oftmals google-links zu euch fuehren, oder ihr meine priorisierte anlaufstelle seit. danke dafuer.

gestern habe ich angefangen auf meinem rootserver (debian) openvpn zu installieren und zu konfigurieren.

mein derzeitiger status beschreibt sich folgendermaßen. ich bin btw. nach folgendem tutorial vorgegangen. zumindest teilweise.
( http://www.linuxforen.de/forums/showthread.php?t=169354 )

ich kann von meinem client aus, (windows 7 ulti 64bit) ueber openvpn gui eine verbindung initialisieren. stabil. solange meine fw (iptables) nicht auf der gegenseite rennt. diese ist allerdings unablaessig. es folgt der winzige auszug meines iptables scriptes, welches auf das vpn bezogen ist:

## IP VPN FORWARDING SHIT ## // PROBLEM MIT IPTABLES BEHOBEN // <- EDIT (es fehlte zeile 3)
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A INPUT -i tun0 -m state --state NEW -p udp --dport 59000 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT

nun folgt die openvpn server config, mit dieser wird openvpn auf meinem root initialisiert:

dev tun
proto udp
port 59000
ifconfig 10.1.0.1 10.1.0.2
tls-server
dh /etc/openvpn/zertifikate/dh2048.pem
ca /etc/openvpn/zertifikate/ca.crt
cert /etc/openvpn/zertifikate/server.crt
key /etc/openvpn/zertifikate/server.key
user nobody
group nogroup
status /etc/openvpn/openvpn-status.log
comp-lzo
verb 3

nun folgt dies von meinem windows client genutztem openvpn gui:

dev tun
remote XX.XXX.XX.XXX ##remoteIP
ifconfig 10.1.0.2 10.1.0.1
tls-client
ca E:\\miragecertz\\ca.crt
cert E:\\miragecertz\\client1.crt
key E:\\miragecertz\\client1.key
port 59000
user nobody
group nogroup
comp-lzo
verb 3

nun bräuchte ich noch hilfestellung um mit meinem vpn client ueber den vpn server auf internet zugreifen zu koennen. sprich routing. wird das in iptables gemacht? Oo

falls ich noch etwas vergessen haben sollte, um mit eine umfassende hilfestellung leisten zu koennen, gebt bitte laut.

vielen dank fuer die zeit die ihr euch nehmt um mit mir an diesem problem zu arbeiten.

lg, krutt

ctFreez
03.05.11, 12:51
Moin,

magst auch du deine config in CODE tag packen?
Soll der gesamte traffic von dem client über den Server geleitet werden? Wenn ja, dann sollte dein openvpn Server die option "redirect-gateway def1" an den client pushen.

Wie welches Netz erreichbar ist steht in der Routing Tabelle.

gruß Felix

PS: und last doch endlich mal die Finger vom privaten Class-A Block

krutt
03.05.11, 13:19
hallo felix,

danke fuer diesen hinweis.
bin mir nicht sicher ob das auch hier her gehoert, aber kannst du mir noch sagen, wie ich meinem windows 7 ultimate client sage, das er nur die vpn verbindung nutzen soll?

danke

ctFreez
03.05.11, 14:02
Moin,

du solltest darauf achten, das der openvpn client mit admin rechten läuft, da es ihm sonst verboten ist den std. Gateway neu zu setzten.

google mal nach "redirect-gateway def1" da solltest du eigentlich alles finden, was du brauchst. Dich pushe die option vom server aus richtung client.

gruß Felix

krutt
03.05.11, 19:57
danke felix,

ja, mein vpngui rennt mit admin rechten. habe "redirect-gateway def1" in meine .ovpn im server gesetzt. dennoch surfe ich vom client aus mit meine ip. warum?

greetz

ctFreez
03.05.11, 21:16
Moin,

du must die option an den client pushen
server.conf

push "redirect-gateway def1"
damit der client eine expliziete Route zum openvpn Server einrichtet, anschlißend wird der alte default gw gelöscht und der neue default gw über den openvpn Server eingetragen.
kontrolieren kannst du die einstellung auf dem client mit "route print"
ausserdem solltest du einen entsprechenden eintrag im openvpn client log finden und einen eintrag im Server Log, das die option gepusht wurde.

Es ist übrigens deutlich einfacher nach zu volziehen, was schief gegangen ist, wenn du client + server config sowie die dazugehöringen routing tabellen und die aktuellen Firewall einstellungen (iptables -L) in [CODE] Tags posten würdest.

gruß Felix

krutt
04.05.11, 11:42
hi felix,
server.conf


# Port
port 59000

# TCP oder UDP?
#proto tcp-server
proto udp
mode server
tls-server

# tun oder tap?
# Das tun Device erstellt einen IP Tunnel,
# während das tap Device einen Ethernet Tunnel erstellt.
#tun or tap device
#tun is an IP tunnel,
#tap an ethernet tunnel
dev tap

#Our Server IP
ifconfig 10.0.0.1 255.255.255.0

#dynamic clients from 10.0.0.2-10.0.0.254
ifconfig-pool 10.0.0.2 10.0.0.254

#Die pakete werden auf dieser größe gekapselt
tun-mtu 1492
#fragment 1300
mssfix

#Paths to the certs
ca certs/vpn-ca.pem
cert certs/servercert.pem
key certs/serverkey.pem

#Clients können miteinander kommunizieren
#client-to-client

#Diffie-Hellmann Parameters
dh certs/dh1024.pem

#Same Ip in the next session
ifconfig-pool-persist ipp.txt

#Routes the packages to the intern network, you should use iptables instead of this
#push "route 192.168.0.0 255.255.255.0"
push "redirect-gateway def1"

#Tests the connection with a ping like paket. (wait=120sec)
keepalive 10 120

#Authenication
auth SHA1

#Our encryption algorithm
#cipher aes-256-ecb
#openvpn --show-ciphers for testing

#comp
comp-lzo

#Sets new rights after the connection
user nobody
group nogroup

#We need this because of user nobody/group nobody.
persist-key
persist-tun

#Logging 0, (testing:5)
verb 0



server.ovpn:


dev tun
proto udp
port 59000
ifconfig 10.1.0.1 10.1.0.2
tls-server
dh /etc/openvpn/zertifikate/dh2048.pem
ca /etc/openvpn/zertifikate/ca.crt
cert /etc/openvpn/zertifikate/server.crt
key /etc/openvpn/zertifikate/server.key
push "redirect-gateway def1"
user nobody
group nogroup
status /etc/openvpn/openvpn-status.log
comp-lzo
verb 3



client.ovpn


dev tun
remote "remote_IP"
ifconfig 10.1.0.2 10.1.0.1
tls-client
ca E:\\miragecertz\\ca.crt
cert E:\\miragecertz\\client1.crt
key E:\\miragecertz\\client1.key
port 59000
user nobody
group nogroup
comp-lzo
verb 3


iptables script auszug, bezogen nur auf openvpn.
es wird quasi alles geblockt, wenn nicht die entsprechenden zeilen in diesem script hinterlegt sind. eine verbindung zwischen meinem client und dem server via vpn funktioniert einwandfrei. jedoch nicht von client ueber den server ins internet.



###########################
## IP VPN FORWARDING SHIT ##
############################

iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A INPUT -i tun0 -m state --state NEW -p udp --dport 59000 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT

iptables -A FORWARD -i tun0 -o eth0 -s 10.1.0.0/24 -d remoteip/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -s 10.1.0.0/24 -d remoteip/24 -j ACCEPT


iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -s 10.1.0.0/24 -o eth0 -j ACCEPT
#iptables -A FORWARD -i eth0 -o tun0 -m state –state ESTABLISHED,RELATED -j ACCEPT

#OpenVPN zulassen
iptables -A INPUT -p udp --dport 59000 -j ACCEPT



route windows client:


IPv4-Routentabelle
================================================== =========================
Aktive Routen:
Netzwerkziel Netzwerkmaske Gateway Schnittstelle Metrik
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.196 30
10.1.0.0 255.255.255.252 Auf Verbindung 10.1.0.2 286
10.1.0.2 255.255.255.255 Auf Verbindung 10.1.0.2 286
10.1.0.3 255.255.255.255 Auf Verbindung 10.1.0.2 286
127.0.0.0 255.0.0.0 Auf Verbindung 127.0.0.1 306
127.0.0.1 255.255.255.255 Auf Verbindung 127.0.0.1 306
127.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 306
192.168.0.0 255.255.255.0 Auf Verbindung 192.168.0.196 286
192.168.0.196 255.255.255.255 Auf Verbindung 192.168.0.196 286
192.168.0.255 255.255.255.255 Auf Verbindung 192.168.0.196 286
224.0.0.0 240.0.0.0 Auf Verbindung 127.0.0.1 306
224.0.0.0 240.0.0.0 Auf Verbindung 192.168.0.196 286
224.0.0.0 240.0.0.0 Auf Verbindung 10.1.0.2 286
255.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 306
255.255.255.255 255.255.255.255 Auf Verbindung 192.168.0.196 286
255.255.255.255 255.255.255.255 Auf Verbindung 10.1.0.2 286
================================================== =========================
Ständige Routen:
Keine


route debian server:


netstat -r
Kernel-IP-Routentabelle
Ziel Router Genmask Flags MSS Fenster irtt Iface
10.1.0.2 * 255.255.255.255 UH 0 0 0 tun0
XX.XX.XX.X(remote_ip) * 255.255.255.0 U 0 0 0 eth0
default vss-1-6k.fr.eu 0.0.0.0 UG 0 0 0 eth0


lg krutt

ctFreez
04.05.11, 13:16
Moin,

die Route unter deinem Winodws System ist nicht richtig gesetzt.
guck doch mal ob du in deinem client log etwas in dieser Art findest:


Wed May 04 13:42:18 2011 SENT CONTROL [*****]: 'PUSH_REQUEST' (status=1)
Wed May 04 13:42:18 2011 PUSH: Received control message: 'PUSH_REPLY,route 192.168.20.0 255.255.255.0,route 192.168.31.0 255.255.255.0,route 192.168.38.0 255.255.254.0,route 192.168.88.0 255.255.248.0,route 192.168.64.0 255.255.254.0,dhcp-option DNS 192.168.65.1,redirect-gateway def1,route 192.168.65.0 255.255.255.0,topology net30,ping 20,ping-restart 180,ifconfig 192.168.65.6 192.168.65.5'
Wed May 04 13:42:18 2011 OPTIONS IMPORT: timers and/or timeouts modified
Wed May 04 13:42:18 2011 OPTIONS IMPORT: --ifconfig/up options modified
Wed May 04 13:42:18 2011 OPTIONS IMPORT: route options modified
Wed May 04 13:42:18 2011 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed May 04 13:42:18 2011 Preserving previous TUN/TAP instance: VPN
Wed May 04 13:42:18 2011 Initialization Sequence Completed

von interesse ist dabei der eintrag "redirect-gateway"
wenn in den folgezeilen ein fehler auftaucht, dann weißst du wo du weiter suchen must. wenn du redirect-gateway nicht findest, dann bekommt dein client die anweisung nicht vom Server.
Und füge bitte die option "pull" zur client config hinzu, ich bin mir gerade nicht sicher, wie die default einstellung diesbezüglich sind.

Gruß Felix

krutt
04.05.11, 14:58
wenn du redirect-gateway nicht findest, dann bekommt dein client die anweisung nicht vom Server.

ist so. habe die push anweisung jedoch in der server.conf eingetragen.

ctFreez
04.05.11, 17:43
Moin,

kann sein, das du auf dem Server versuchst mit 2 config Datein zu Arbeiten? Die Config Datein für client und Server enden bei Linux i.d.R. auf .conf unter windows auf .ovpn.

Wenn die option von den Server an den Client gepushed wird und auf dem Client der std. gw nicht angepasswird, dann scheint da irgendwas mit den Rechten auf dem Client noch nicht ganz hin zu haun.

Zum Vergleich meine Server Config:


server 192.168.65.0 255.255.255.0
port 443
local 80.?.?.24
proto tcp
dev tun1

log-append /var/log/openvpn.log

ns-cert-type client
tls-remote GEHEIM
ca sslvpn/ca.crt
cert sslvpn/server.crt
key sslvpn/server.key
dh sslvpn/dh2048.pem

client-config-dir ccd
client-to-client

push "route 192.168.20.0 255.255.255.0"
push "route 192.168.31.0 255.255.255.0"
push "route 192.168.38.0 255.255.254.0"
push "route 192.168.88.0 255.255.248.0"

push "route 192.168.64.0 255.255.254.0"

push "dhcp-option DNS 192.168.65.1"

push "redirect-gateway def1"

script-security 3 system
cd /etc/openvpn
client-connect ./client-connect.sh
client-disconnect ./client-disconnect.sh

ping-timer-rem
keepalive 20 180
verb 3
float

persist-key
persist-tun
user openvpn
group nogroup

auth SHA1
cipher AES-256-CBC
comp-lzo


Und meine Client Config:


tls-client
pull
dev tun
proto tcp-client
remote 80.?.?.24 443
float
nobind
# optional Proxy Settings
auto-proxy
http-proxy cwlan-cache.fh-wedel.de 3128
http-proxy-retry
http-proxy-option AGENT Mozilla/5.0+(Windows;+U;+Windows+NT+5.0;+en-GB;+rv:1.7.6)+Gecko/20050226+Firefox/1.0.1

tls-remote "GEHEIM"
ns-cert-type server
ca ca.crt
cert vpnclient-ice.crt
key vpnclient-ice.key
cipher AES-256-CBC
auth SHA1

script-security 3 system
up-restart

connect-retry-max 5
resolv-retry 10
ping 10
ping-restart 60

persist-key
persist-tun

verb 3
comp-lzo

Ich Verwende die OpenVPN GUI v 1.0.4 von openvpn.se (http://openvpn.se)
Mit OpenVPN 2.1.1 i686-pc-mingw32

firewall:


#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
IPTABLES="/sbin/iptables"
NET="venet0"
VPN="tun1"
$IPTABLES -A FORWARD -i $VPN -o $NET -j ACCEPT
$IPTABLES -A FORWARD -i $NET -o $VPN -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $NET -j MASQUERADE

gruß Felix

krutt
04.05.11, 21:16
hi felix,

du hattest natuerlich recht. ich habe mit zwei verschiedenen "configs" gearbeitet. meinen openvpn server habe ich immer manuel, bzw durch ein script eingeleitet. dieses script endete bei mir auf dem debian server auch mit ovpn. wenn ich so darueber nachdenke, ziemlich daemlich xD

wie du wohl gemerkt hast, bin ich in sachen openvpn blutiger anfaenger.

sag, waerst du bereit mit mir noch deine connect scripts (diese waren in iptables script vermerkt) zu teilen?

vielleicht kann ich deine konfiguration im weitestem sinne uebernehmen. siehst du da probleme? hast auch du einen linux server als openvpn server?

wie sollte ich deiner meinung nach die sache am besten angehen. ich lese mich derzeit schon tierisch in den stoff ein.

ps: auch ich muss demnächst mehrere clients dort "unterbringen". da eignet sich meine schwachmaten config nunmal garnicht. diese ist nur auf einen client ausgelegt.

lg, krutt

ctFreez
05.05.11, 09:07
Moin,

in den Scripen für client-connect & client-disconnect wird nix mehr gemacht, was mit dem eigentlichen verbindungsaufbau zu tun hat, ich schreibe die anzahl der übertragenen Bytes in eine mySQL Datenbank und führe ein bischen statistik.

Das client-config-dir benutze ich nur um mehrere Netze mit einander zu verbinden. Für Normale User gibt es dort keine Einstellungen.

Die Config darfst du übernehmen, wenn du versprchst JEDE verwendete option in der man page nach zu lesen. Das habe ich auch machen müssen, nur das ich nicht wuste, ob es mich weiter bringt.
Du wirst sicher noch einige anpassungen machen müssen, da ich in meiner config 14 Class-C Netze Verteile. Ausserdem habe ich strenge regeln für die Zertifikate gesetzt, vieleicht musst du die Parameter für tls-remote und ns-cert-type anpassen.

Gruß Felix