Jail verfügbar machen durch OpenVPN Host

arcona

Well-Known Member
Hallo,

ich habe hier einen kleinen Server im LAN.
Auf diesem Server läuft eine Jail und ein OpenVPN Server.

Ich möchte nun gerne die Jail nur durch den OpenVPN Server auf dem Host erreichen.
Dazu habe ich einen IP Alias für das tap0 Device angelegt und dann diese IP der Jail zugeordnet.

Auf dem Host habe ich Gateway enabled in die rc.conf und in der Jail den Host (OpenVPN IP) als default Router eingerichtet.

Mit diesen Einstellungen kann ich schon die Jail per SSH erreichen. Allerdings habe ich keine Verbidung aus der Jail nach draußen/ins Internet.
/etc/rc.conf Host:
Code:
hostname="vpn.bsd"
ifconfig_em0="DHCP"
inetd_enable="YES"
keymap="german.iso"

openvpn_enable="YES"
openvpn_configfile="/openvpn/openvpn.conf"
openvpn_dir="/openvpn/"

sshd_enable="YES"

samba_enable="YES"
winbindd_enable="YES"

gateway_enable="YES"

jail_enable="YES"
jail_list="jail1"

jail_jail1_devfs_enable="YES"
jail_jail1_devfs_ruleset="devfsrules_jail"
jail_jail1_procfs_enable="YES"
jail_jail1_fdescfs_enable="NO" 
jail_jail1_mount_enable="NO"  
jail_jail1_rootdir="/usr/home/jail/jails/jail1"        #Pfad aus $DESTDIR eintragen
jail_jail1_hostname="jail1"
jail_jail1_netmask="255.255.255.255"
#jail_jail1_ip="192.168.0.111"
jail_jail1_ip="10.8.1.21"
#ifconfig_em0_alias0="192.168.0.111 netmask 255.255.255.0"
ifconfig_tap0_alias0="10.8.1.21 netmask 255.255.255.0"
jail_jail1_exec_start="/bin/sh /etc/rc"
jail_jail1_exec_stop="/bin/sh /etc/rc.shutdown"
/etc/rc.conf JAIL
Code:
hostname="jail1"
defaultrouter="10.8.1.1"          
rpcbind_enable="NO"
inetd_enable="NO"
network_interfaces=""
sshd_enable="YES"
sendmail_enable="NONE"
sendmail_outbound_enable="NO"
syslogd_enable="YES"
syslogd_programm="/usr/sbin/syslogd"
syslogd_flags="-s -s -a 192.168.0.111"  
font8x8="iso15-8x8"
font8x14="iso15-8x14"
font8x16="iso15-8x16"
keymap="german.iso"
cron_enable="NO"

ifconfig HOST
Code:
vpn# ifconfig 
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 08:00:27:e9:34:3a
        inet 192.168.0.122 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 
        inet6 ::1 prefixlen 128 
        inet 127.0.0.1 netmask 0xff000000 
        nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 00:bd:2a:11:00:00
        inet 10.8.1.1 netmask 0xffffff00 broadcast 10.8.1.255
        inet 10.8.1.21 netmask 0xffffff00 broadcast 10.8.1.255
        Opened by PID 678
ifconfig JAIL
Code:
%ifconfig 
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 08:00:27:e9:34:3a
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 00:bd:2a:11:00:00
        inet 10.8.1.21 netmask 0xffffff00 broadcast 10.8.1.255
        Opened by PID 678

Die Konfiguration des OpenVPN Servers:
Code:
#Autentifizierungsmethode
auth RSA-SHA1-2
#Verschlüsselungsalgorithmus
cipher AES-256-CBC
#IP auf der gelauscht wird
local 192.168.0.122
#Port auf dem gelauscht wird
port 1194
#proto tcp-server
proto udp

mode server
tls-server
dev tap

client-to-client
#float
keepalive 10 60

#IP des Servers im VPN
ifconfig 10.8.1.1 255.255.255.0
#IP Pool, der an Clients vergeben wird
ifconfig-pool 10.8.1.2 10.8.1.20 
#IP leases speichern
ifconfig-pool-persist ipp.txt

#sende folgende Optionen zum Client
#push "route-gateway 10.8.1.1"
#push "redirect-gateway"
#push "dhcp-option DNS $DNS_SERVER_DES_HEIMNETZES"
push route 10.8.1.1 255.255.255.0

#Zertifikate
ca /openvpn/easy-rsa/keys/ca.crt
key /openvpn/easy-rsa/keys/VPNkufSERVER.key
cert /openvpn/easy-rsa/keys/VPNkufSERVER.crt
dh /openvpn/easy-rsa/keys/dh1024.pem
#crl-verify /root/easy-rsaVPNgw/keys/crl.pem

tls-auth /openvpn/easy-rsa/keys/auth.key 0

#Starte Management Console auf Port 7506
management localhost 7506
#Nutze Komprimierung
comp-lzo

verb 4
mute 50

Welche Einstellung fehlt mir, damit ich auch aus der Jail Kontakt mit der Ausßenwelt aufnehmen kann?

Grüße.
arcona
 
Zuletzt bearbeitet:
Na, die Route zur Jail pushen:
push route 10.8.1.21 255.255.255.255
Das verstehe ich nicht...
Ich kann die Jail von einem OpenVPN Client ja per SSH (ssh user@10.8.1.1) erreichen.

Nur habe ich innerhalb der Jail keine Netz-Verbingung nach draußen durch das Gatway (18.8.1.1). Egal ob ich per ssh in der Jail bin oder direkt vom Host per jexec in die Jail abtauche.

Die push Option betrifft doch nur die OpenVpn Clients. Die Jail ist kein Client, sondern für den OpenVPN Server ein "Rechner" im Lan Segment hinter ihm.
Iirgendwie fehlt mir die Route von 10.8.1.21 durch 10.8.1.1 nach "draußen".
Eigentlich dachte ich, ich würde das auf dem Host mittels:
Code:
gateway_enable="YES"
und in der Jail mittels
Code:
defaultrouter="10.8.1.1"
erreichen.

Grüße.
arcona
 
Vielleicht sieht jemand hier ein Routingproblem.
Auf dem Host:
Code:
vpn# netstat -r
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.0.1        UGS         0      108    em0
10.8.1.0           link#3             U           1     1501   tap0
10.8.1.1           link#3             UHS         0        0    lo0
10.8.1.21          link#3             UHS         0        0    lo0
localhost          link#2             UH          0       53    lo0
192.168.0.0        link#1             U           1     3334    em0
192.168.0.122      link#1             UHS         0        0    lo0

Internet6:
Destination        Gateway            Flags      Netif Expire
localhost          localhost          UH          lo0
fe80::%lo0         link#2             U           lo0
fe80::1%lo0        link#2             UHS         lo0
ff01:2::           fe80::1%lo0        U           lo0
ff02::%lo0         fe80::1%lo0        U           lo0

Dennoch komme ich nicht aus der Jail nach draußen, ein Beispiel:
Code:
vpn# jexec 4 su -l
jail1# pkg_add -r lsof
Error: Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/lsof.tbz: No address record
pkg_add: unable to fetch 'ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/lsof.tbz' by URL
In der Jail sieht es so aus.
Code:
jail1# ifconfig 
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 08:00:27:e9:34:3a
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 00:bd:2a:11:00:00
        inet 10.8.1.21 netmask 0xffffff00 broadcast 10.8.1.255
        Opened by PID 678
jail1# cat /etc/resolv.conf 
nameserver 83.169.185.161
nameserver 83.169.185.225
nameserver 192.168.0.1

jail1# cat /etc/rc.conf 
hostname="jail1"
defaultrouter="10.8.1.1"          
rpcbind_enable="NO"
inetd_enable="NO"
network_interfaces=""
sshd_enable="YES"
sendmail_enable="NONE"
sendmail_outbound_enable="NO"
syslogd_enable="YES"
syslogd_programm="/usr/sbin/syslogd"
syslogd_flags="-s -s -a 10.8.1.21"          #IP-Adress-Alias aus 5.
font8x8="iso15-8x8"
font8x14="iso15-8x14"
font8x16="iso15-8x16"
keymap="german.iso"
cron_enable="NO"
Ich weiß einfach nicht was noch fehlt.

Grüße
arcona
 
Zuletzt bearbeitet:
Hi,

wenn Du ein gebrücktes VPN baust kannst Du aus dem VPN Netz immer alles in diesem Netz Segement erreichen. Du brauchst aber natürlich auch das korrekte GW (des wo nach drausen kann und aus dem VPN Netz aus erreichbar ist) in der Routing Tabelle sonst kommst Du vom VPN Netz nicht raus. Die Firewall Rules müssen dementsprechend natürlich auch die Verbindungen erlauben. Wenn 10.8.1.1 das Default GW wäre - *Augen reib* - warum zeigt der auf lo0 ?

Gruß Bummibär
 
Hi,

wenn Du ein gebrücktes VPN baust kannst Du aus dem VPN Netz immer alles in diesem Netz Segement erreichen. Du brauchst aber natürlich auch das korrekte GW (des wo nach drausen kann und aus dem VPN Netz aus erreichbar ist) in der Routing Tabelle sonst kommst Du vom VPN Netz nicht raus. Die Firewall Rules müssen dementsprechend natürlich auch die Verbindungen erlauben. Wenn 10.8.1.1 das Default GW wäre - *Augen reib* - warum zeigt der auf lo0 ?

Gruß Bummibär
Ich verstehe nicht so ganz wie ich das Routing verändern soll.
Es gibt ja kein wirkliches VPN Netz. Es gibt nur den VPN Server (em0 192.168.0.122 und tap0 10.8.1.1) und die eine Jail (tap0 alias 10.8.1.21), die ich nur durch das VPN auf dem Host erreichbar machen will.
Für das VPN Nezt muss doch dann der VPN Server, also der Jail Host, selbst das GW sein.
Das Default Gateway des Servers ist ein Hardware Router (192.168.0.1).

Ist es für mein Vorhaben überhaupt richtig der Jail ein Alias an tap0 zuzuordnen?

Grüße
arcona
 
Ich habe eine Lösung gefunden, vielleicht interessiert es noch jemand anderen:

Der Jail wird ein IP Alias von tap0 zugeordnet:
Code:
vpn# ifconfig tap0 alias 10.8.1.21/32
Dann die nötigen Einträge in der rc.conf
Code:
jail_enable="YES"
jail_list="jail1"

jail_jail1_devfs_enable="YES"
jail_jail1_devfs_ruleset="devfsrules_jail"
jail_jail1_procfs_enable="YES"
jail_jail1_fdescfs_enable="NO" 
jail_jail1_mount_enable="NO"  
jail_jail1_rootdir="/usr/home/jail/jails/jail1"        
jail_jail1_hostname="jail1"
jail_jail1_netmask="255.255.255.255"
jail_jail1_ip="10.8.1.21"
jail_jail1_exec_start="/bin/sh /etc/rc"
jail_jail1_exec_stop="/bin/sh /etc/rc.shutdown"
Jail starten:
Code:
/etc/rc.d/jail start jail1

Nun ist die Jail schon erreichbar, allerdings nur, wenn man zu dem Jail Host einen OpenVPN Tunnel aufgebaut hat.
Will man der Jail erlauben ins Internet zu kommen, dann funktioiert das mittels NAT Routing durch pf. Dazu sind folgende Einträge in der /etc/pf.conf nötig:
Code:
vpn# cat /etc/pf.conf 
nat on em0 from 10.8.1.21 to any -> 192.168.0.122
pass all
Dann schnell pf starten:
Code:
/etc/rc.d/pf onestart

Vielleicht hilft es ja noch jemanden.

Grüße
arcona
 
Zurück
Oben