Sämtlichen Traffic durch VPN Tunnel routen

BeNeDeLux

Wissensbegierig
Hallo BSD Gemeinde,

ich habe einen FreeBSD Server welcher als Gateway für das Netz und als OpenVPN Client läuft.
Der VPN-Tunnel steht und funktioniert ohne Problem direkt auf dem FreeBSD Server.
Jetzt möchte ich das alle Client's im Netz über diesen bestehenden VPN-Tunnel welcher auf dem FreeBSD läuft online gehen.

Zum einen brauche ich NAT damit ich vom lokalen Netz ins OpenVPN Netz komme,
und zum anderen sind IPFW Regeln nötig. So habe ich es mal verstanden.

Netzwerk: 192.168.178.0/24
Clients: 192.168.178.50 - 192.168.178.150
FreeBSD Server: 192.168.178.32
FritzBox! (Router) : 192.168.178.1
OpenVPN Netz: 5.5.8.79 / 255.255.248.0 (Habe die eine IP vom VPN-Server und kein eigenes Netz)

ifconfig
Code:
freebsd# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
	ether 00:30:18:4a:ec:d7
	inet6 fe80::230:18ff:fe4a:ecd7%em0 prefixlen 64 scopeid 0x1 
	inet6 2002:bc69:dc97:0:230:18ff:fe4a:ecd7 prefixlen 64 autoconf 
	inet 192.168.178.32 netmask 0xffffff00 broadcast 192.168.178.255
	nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=3<RXCSUM,TXCSUM>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5 
	nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536
tun0: flags=8043<UP,BROADCAST,RUNNING,MULTICAST> metric 0 mtu 1500
	options=80000<LINKSTATE>
	inet6 fe80::230:18ff:fe4a:ecd7%tun0 prefixlen 64 scopeid 0x7 
	inet 5.5.8.79 netmask 0xfffff800 broadcast 5.5.15.255
	nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
	Opened by PID 1929

netstat
Code:
freebsd# netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
0.0.0.0/1          5.5.8.1            UGS         1     4894   tun0 =>
default            192.168.178.1      UGS         0      239    em0
5.5.8.0/21         link#7             U           0        0   tun0
5.5.8.79           link#7             UHS         0        0    lo0
46.17.yyy.xxx/32   192.168.178.1      UGS         1     6152    em0
127.0.0.1          link#5             UH          0     2376    lo0
128.0.0.0/1        5.5.8.1            UGS         0       32   tun0
192.168.178.0/24   link#1             U           2     6750    em0
192.168.178.32     link#1             UHS         0        0    lo0

NAT läuft auf tun0
Code:
freebsd# ps -auxw | grep nat
root    1139  0.0  0.1  3440  1332  ??  Is    5:49PM   0:00.00 /sbin/natd -dynamic -m -n tun0

IPFW Regeln
Code:
freebsd# ipfw show
00100  4804  433008 allow ip from any to any via lo0
00200     0       0 deny ip from any to 127.0.0.0/8
00300     0       0 deny ip from 127.0.0.0/8 to any
00400     0       0 deny ip from any to ::1
00500     0       0 deny ip from ::1 to any
00600     4     292 allow ipv6-icmp from :: to ff02::/16
00700     0       0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800    47    5964 allow ipv6-icmp from fe80::/10 to ff02::/16
00900     0       0 allow ipv6-icmp from any to any ip6 icmp6types 1
01000     0       0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
01100     8     480 nat 1 ip from 192.168.178.0/24 to any xmit tun0
01101  7501  488532 nat 1 ip from any to me recv tun0
65000 37755 3736535 allow ip from any to any
65535     0       0 deny ip from any to any
Die Regel 1100 und 1101 habe ich für das NAT Routing aus dem Heimnetz in das OpenVPN Netz auf tun0 erstellt.
Code:
ipfw add 1100 nat 1 all from 192.168.178.0/24 to any xmit tun0
ipfw add 1101 nat 1 all from any to me recv tun0

Paket werden dort zwar verarbeitet, aber es kommt kein Client durch den Tunnel online.
Leider kann ich auch nicht mit 100%iger Sicherheit sagen ob die IPFW Regeln so stimmen.
Mit dem FreeBSD Handbuch und Foren lesen bin ich jetzt bis hier her schon mal gekommen.

Hatte das ganze schon so auf der FritzBox! mit Freetz laufen. Doch die Hardware dafür ist zu langsam und hatte zu geringen Druchsatz.

Leider komme ich an dieser Stelle nicht mehr weiter und bin für jeden Tipp oder Hilfe dankbar!
 
Hi,

ist lange her, das ich mit OpenVPN rumgemacht habe. Mit IPFW kenne ich mich überhaupt nicht aus, da mein bevorzugter Paketfilter pf ist. Ich kann Dir aber sagen, dass der OpenVPN-Server in seiner config die Option

Code:
push "redirect-gateway def1"
benötigt. Damit wird der Client bei Verbindung angewiesen, auch den Traffic, der nicht fürs VPN-Netz gedacht ist, durch den Tunnel zu juckeln.

Leider hat mein FreeBSD-Server gerade die Grätsche gemacht, ich kann Dir leider im Moment kein konkretes Beispiel geben. Aber vielleicht hilft das schon weiter.

Gruß c.
 
Hi crotchmaster,

danke für deine Antwort.
Ja soweit ist der OpenVPN-Server korrekt konfiguriert. Habe schon mal Windows als Client her genommen und dort wird alles in den Tunnel geroutet.
Sprich, ich bin ganz normal ins Internet über den VPN-Tunnel. Der FreeBSD-Server soll den Tunnel aufmachen und den Client´s hier im Netz als Gateway zur Verfügung stellen.

Grüße,
BeNe
 
Bekommt der Client denn die OpenVPN Kiste als Gateway gesetzt?
Wie crotchmaster schrieb, muss das in der server.config gesetzt werden.

Bei IPFW bin ich leider auch raus, weil ich ebenfalls mit pf hantiere.

Edit:
Starte am Client den Tunnel mal im Terminal (ggf. vorher "verb 5" in der client.conf setzen) und schau dir die Ausgabe an.
 
Zuletzt bearbeitet:
Hi XPectIT,

danke für deine Antwort.

Ja. Der Client ist ja in dem Fall der FreeBSD-Server selber!
Code:
freebsd# netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
0.0.0.0/1          5.5.8.1            UGS         1     4894   tun0 =>
....
....
Ich kann mit w3m oder lynx an der FreeBSD Kiste auf der Shell online und sämtlicher Traffic geht dabei durch den Tunnel. Soweit sollte das auch passen.
Nur will ich ja mit weiteren PC über den FreeBSD-Server druch den VPN-Tunnel online gehen.
Ist nicht mein OpenVPN-Server und ich habe auch nur einen Zugang. Daher das vorhaben.
 
ipfw add 1100 nat 1 all from 192.168.178.0/24 to any xmit tun0
ipfw add 1101 nat 1 all from any to me recv tun0

"nat all" kann ipfw nicht verarbeiten, wenn dann "nat ip"
mach mal "nat show config"

Es gibt auch einen Patch für nat, die Sache ist, nat kann unter gewissen Umständen die öffentliche IP nicht ermitteln. Ob das bei dir zutrifft weiß ich nicht.
Gruß
 
ipfw nat show config
ist aber richtig, das heißt dein nat funzt nicht.

richtig heißt natürlich "nat ip4 xxx meine rules"

nat funzt nur auf ipv4, denke aber das weißt du.
Gruß
 
Ja, das würde das Problem erklären :rolleyes:

Beim restart von natd bekomme mal ich keine Fehler.
Code:
freebsd# /etc/rc.d/natd restart
Stopping natd.
Waiting for PIDS: 37265.
Starting natd.
Loading /lib/libalias_cuseeme.so
Loading /lib/libalias_ftp.so
Loading /lib/libalias_irc.so
Loading /lib/libalias_nbt.so
Loading /lib/libalias_pptp.so
Loading /lib/libalias_skinny.so
Loading /lib/libalias_smedia.so
freebsd#
In der rc.conf habe ich folgendes zu NAT stehen.
Code:
freebsd# cat /etc/rc.conf | grep natd
natd_enable="YES"                   # Enable NATD function
natd_interface="tun0"                # interface name of public Internet NIC
natd_flags="-dynamic -m"            # -m = preserve port numbers if possible
Könnte sein das ich beim boot durch die rc.conf das "tun0" interface für NAT benutze - was aber erst existiert wenn der Tunnel steht.
Dann sollte es soch aber klappen wenn ich den Tunnel aufbaue und dann NATD neustarte. Haut aber auch nicht hin.
 
dannn alle client vom dir zu ip des VPN-Servers/Tunnel
ipfw add Nr. all Proto from intern Netz to VPN-Server out/xmit via tun0
Rest deny... kommt darauf an was du alles durch den Tunnel jagst

OpenVPN selbst prüft die Verbindung, also ob die Verbindung noch besteht oder abgerissen ist oder Client weg ist und auch gibts Zeiteinstellung im OpenVPN. Du kannst das ja auch so probieren ohne Neustart etc.

ipfw add meine Rules in der Konsole ..ohne groß Neustart,
ipfw show | more
Gruß
 
das ist so i.O

deine rules sollten so sein alle client vom dir zu ip des VPN-Servers/Tunnel
ipfw add Nr. all Proto from intern Netz to VPN-Server out/xmit via tun0
Rest deny... kommt darauf an was du alles durch den Tunnel jagst

OpenVPN selbst prüft die Verbindung, also ob die Verbindung noch besteht oder abgerissen ist oder Client weg ist und auch gibts Zeiteinstellung im OpenVPN.

Du kannst das ja auch so probieren ohne Neustart etc.:

ipfw add meine Rules Enter | in der Konsole ..ohne groß Neustart,
zum kontrollieren:
ipfw show | more
ipfw nat show config
Benutz mal die Forumsuche, vor paar Wochen hatte jemand das gleiche oder ähnlich Problem.
Auf jeden Fall darf es keine Fehler bei sh rc.firewall geben so was wie -1 oder so ein Zeugs, schreib mal oben ins rc.firewall Script "sleep 5"
das bei Neustart schön der Reihe nach geht.
paar Sachen müssen auch mit sysctl geschalten werden und solltest du kontrollieren
net.inet.ip.fw.one_pass sollte 1 sein
net.inet.ip.fw.enable auch 1

Gruß
 
Zuletzt bearbeitet:
Hey Flex6,

danke der Nachfrage. Im Moment habe ich gerade keinen Zugriff auf den Server (Feiertage bedingt).
Werde es aber kurz nach Weihnachten angehen und gebe dann bescheid.

Danke!
 
Zurück
Oben