Trivial: FreeBSD (Jail) als Gateway

DemonLord

Weeeeee!
Hey Leute!

Ich hab hier zu Hause ein FreeNAS stehen, das u.A. ein Jail hat. In diesem Jail (mit eigener IP) läuft ein OpenVPN Client. Diese Anbindung klappt auch super (Alle Ressourcen des VPN sehen der Jail zur Verfügung). Auch kann ich logischerweise alle Clients im LAN erreichen.

Nun will ich aber, dass alle meine LAN-Clients den FreeBSD-Jail als Gate benutzen, um das OpenVPN zu teilen (kein Default GW). Dazu habe ich in die rc.conf die gateway_enable und router_enable gesetzt und neu gestartet.

Trotz setzen einer Route auf einem Linux Client kommen keine Pakete am OpenVPN Server an. Tcpdump zeigt jedoch, dass die ICMP Requests auf der Jail ankommen. Ich vermute das Jail-Teil routet die Pakete einfach nicht richtig.

Ich hoffe auf Fehlkonfiguration, nicht auf "Das geht mit Jails nicht" :)

Bin über jeden Pointer dankbar! \o/

Grüße!
-Christian.
 
Hey Leute!

Ich hab hier zu Hause ein FreeNAS stehen, das u.A. ein Jail hat. In diesem Jail (mit eigener IP) läuft ein OpenVPN Client. Diese Anbindung klappt auch super (Alle Ressourcen des VPN sehen der Jail zur Verfügung). Auch kann ich logischerweise alle Clients im LAN erreichen.

Führe bitte folgende Befehle in der Jail aus:
Code:
sysctl security.jail.vnet # Does this jail own its own IP stack
ifconfig -a # List all interfaces visible from the jail
netstat -rnfinet # Dump the IPv4 routing table
sysctl net.inet.ip.forwarding

Nun will ich aber, dass alle meine LAN-Clients den FreeBSD-Jail als Gate benutzen, um das OpenVPN zu teilen (kein Default GW). Dazu habe ich in die rc.conf die gateway_enable und router_enable gesetzt und neu gestartet.

Trotz setzen einer Route auf einem Linux Client kommen keine Pakete am OpenVPN Server an. Tcpdump zeigt jedoch, dass die ICMP Requests auf der Jail ankommen. Ich vermute das Jail-Teil routet die Pakete einfach nicht richtig.

Sollte die Jail nicht auf der Defaultroute liegen so muss jeder Mitnutzer der OpenVPN Verbindung eine Route durch die Jail haben, die von der Defaultroute abweicht. In deinem Fall ist es vermutlich passend einfach statische Routen zu definieren.

Ich hoffe auf Fehlkonfiguration, nicht auf "Das geht mit Jails nicht" :)

Was du vor hast (OpenVPN und IP routing in einer Jail) ist nur mit VIMAGE möglich. VIMAGE (manchmal auch vnet genannt) ist eine Erweiterung des Konzeptes der FreeBSD in den FreeBSD IP Stack hinein. Ohne VIMAGE haben Jails keinen eigenen IP Stack. Stattdessen haben Jails eingeschränkten Zugriff den IP Stack des Hosts. Mit VIMAGE kann eine Jail alternativ auch einen eigenen IP Stack haben. Leider ist um VIMAGE zu implementieren ein sehr tiefer Eingriff in den IP Stack nötig und der VIMAGE Code hat noch immer den ein oder anderen Bug, weswegen er vor sich selbst als "highly experimental feature" warnt.

FreeNAS liefert afaik einen Kernel mit, der VIMAGE fähig ist und erlaubt es dir auch im Webinterface Jails zu erstellen, die VIMAGE nutzen. Es ist also möglich. Ich bezweifel jedoch, dass es die optimale Lösung ist.
 
Hey Crest!

Danke für die detailiere Antwort.

Code:
root@syncer:~# sysctl security.jail.vnet # Does this jail own its own IP stack
security.jail.vnet: 1
root@syncer:~# ifconfig -a # List all interfaces visible from the jail
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
epair0b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 02:b0:91:00:0d:0b
        inet 10.0.0.113 netmask 0xffffff00 broadcast 10.0.0.255
        nd6 options=1<PERFORMNUD>
        media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
        status: active
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet 10.10.0.26 --> 10.10.0.25 netmask 0xffffffff
        nd6 options=1<PERFORMNUD>
        Opened by PID 98779
root@syncer:~# netstat -rnfinet # Dump the IPv4 routing table
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            10.0.0.1           UGS         0  8038433 epair0
10.0.0.0/24        link#2             U           1      851 epair0
10.0.0.113         link#2             UHS         0        0    lo0
10.1.0.0/24        10.10.0.25         UGS         0  7810037   tun0
10.10.0.1/32       10.10.0.25         UGS         0        0   tun0
10.10.0.25         link#3             UH          0        9   tun0
10.10.0.26         link#3             UHS         0        0    lo0
127.0.0.1          link#1             UH          0        0    lo0
root@syncer:~# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1

10.0.0.0/24 ist das Heimnetz, 10.1.0.3 ist das openvpn Netz. Eine statische Route habe ich bereits in der Fritz-Box eingetragen. Ein Ping von (m)einem Rechner (ohne lokale route) in das OpenVPN Netz kommt auch in dem Jail an, somit klappt die Route schonmal. Allerdings sehe ich kein ICMP Traffic in der Jail über tun0 (openvpn), jedoch über epair0b (lan). Ein Ping innerhalb der Jail seit Traffic auf tun0 an. Irgendwie routed die Jail nicht. Sonst sollte alles gehen...

Vielen lieben Dank bislang!

-Christian
 
Reich deiner Jail ein paar bpf Devices rein und fühl den Interfaces mit
Code:
tcpdump -p -i $INTERFACE -s 65535 -w /tmp/${INTERFACE}.pcap icmp
auf den Zahn während ping läuft.
 
Mal kurz ignorant reingefragt: Wie ist denn der Status von VNET mittlerweile? Immer noch extrem experimentell?
 
Zurück
Oben