Kein Netzwerk in iocage Jail auf FreeBSD 12.0

grau

Member
Hallo zusammen,

vielleicht verstehe ich da ja tatsächlich was grundlegend falsch.
Ich habe ein frisches FreeBSD 12.0 und bekomme per DHCP eine IPv4 vom Hoster zugeschubst (ifconfig_em0="DHCP" in rc.conf). Meine externe IP für em0 sei also z.B. 66.77.88.99 - Auf dem Host habe ich damit problemlos Netzwerkzugriff.

Nun möchte ich per iocage neue Jails erstellen - das habe ich analog zum https://iocage.readthedocs.io/en/latest/networking.html gemacht.

Code:
iocage create -r latest ipv4_addr="em0|10.1.1.10/24" -n meinetestjail

Auf dem Interface des Hosts sehe ich nun das neue

Code:
em0: inet 10.1.1.10 netmask 0xffffff00 broadcast 10.1.1.255

Wenn ich mich in die neu erstellte Jail begebe, habe ich jedoch keinen Netzwerkzugang nach draußen.

Vergesse ich bei der Geschichte irgendetwas? Freue mich auf Winks mit Zaunpfählen ;)
 
Ich gehe davon aus, dass du noch aktivieren musst, dass dein Host als Gateway fungieren darf. Ebenfalls wirst du "pf" (oder dergleichen) konfigurieren und aktivieren musst. Genaueres kann ich dir erst später raussuchen, vielleicht hilft dir das aber schon einmal weiter.
 
Habe also nun sysctl net.inet.ip.forwarding=1 und gateway_enable="YES" in rc.conf des hosts aktiviert.

Außerdem mal testweise allow_raw_sockets für jail - aus selbiger:

ping 10.1.1.10 funktioniert (klar, habe ich vergeben) ,
ping 66.77.88.99 funktioniert (die zugewiesene Hostadresse)
ping 8.8.8.8 funktioniert nicht

also komme ich tatsächlich nicht "raus" aus dem Gerät.

Code:
netstat -rn

Destination        Gateway            Flags     Netif Expire
default            66.77.88.95        UGS         em0
10.1.1.0/24        link#1             U           em0
10.1.1.10          link#1             UHS         lo0
66.77.88.94/26     link#1             U           em0
66.77.88.99        link#1             UHS         lo0
127.0.0.1          link#2             UH          lo0
 
Hast du dir mal mit tcpdump angesehen, was mit dem Ping auf 8.8.8.8 passiert? Ich gehe davon aus, dass das Antwortpaket nicht zurückkommt. -> NAT aktivieren über pf.
 
Jetzt mal ganz doof (das bin ich nämlich was Netzwerkzeugs angeht wie man hier merken kann):

ich habe eine externe netzwerkschnittstelle (em0), die eine externe IP bekommt.

wenn ich mit iocage hier ein ip4_addr="em0|10.1.1.10/24" eintrage, bekommt ja diese Schnittstelle auf dem host eine weitere IP. Sprich em0 hat die externe IP und diese manuell vergebene "interne IP".
Code:
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=81249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER>
...
        inet6 fe80::4e52:62ff:fe0e:7be%em0 prefixlen 64 scopeid 0x1
        inet 66.77.88.99 netmask 0xffffffc0 broadcast ...
        inet 10.1.1.10 netmask 0xffffff00 broadcast 10.1.1.255
...

Mit pf kann ich doch nur zwischen verschiedenen Netzwerk-Interfaces NAT machen, oder? (oder wieder einmal ein Missverständnis?)

Also grob gefragt: der einfachste und richtige Weg von einem frisch aufgesetzten FreeBSD-12.0 zu einem iocage Jail mit Netzwerk wäre wie? Habe ich mit der iocage-Anleitung mit em0 nicht einen Denkfehler?
 
Wie es laufen muss (und ob das funktioniert), wenn du die Jail auch auf em0 bindest, weiß ich nicht. In dem Fall hätte ich gefühlsmäßig nicht auf em0 gebunden (so habe ich es hier zwar auch, aber der Host selbst hat mit em0 eine IP im selben Netzwerk wie die Jail) sondern auf lo0.

Deswegen hab ich mal ein wenig gegoogelt und das hier gefunden. Ich will mich ja nicht mit fremden Federn schmücken:
https://www.chruetertee.ch/blog/archive/2008/12/31/freebsd-jails-mit-nat-betreiben.html

Dort siehst du, dass pf aktiviert ist, gateway_enable ist aktiv (hast du bereits) und die Jail kommt per nat
nat on $ext_if proto {tcp udp} from $testjail to any -> ($ext_if)

ins Internet.
HTH
 
Okay.
Die Spielregel ist, wenn man ein jail mit einer privaten IP adresse hat (zB 10.x.x.x), dann ist das fürs Routing ähnlich wie wenn es ein separater zweiter Rechner wäre: man braucht dann NAT.
Wie man das jeweils dem Firewall beibringt, kommt auf den Einzelfall an - aber das hast Du ja offenbar rausgekriegt.
 
@PMc , das klingt auch alles logisch, allerdings (finde ich) lässt die Dokumentation von iocage hier viel Spielraum zur Auslegung. Aber danke für die Hilfe hier!

The Shared IP networking option is rock solid, with over a decade of heavy use and testing.
It has no specific system requirements, as everything needed is built directly into the default GENERIC kernel.

Using Shared IP
There are a few steps to follow when setting up Shared IP:
...
Configure an IP address

# iocage set ip4_addr="em0|10.1.1.10/24" examplejail1
If multiple addresses are desired, separate the configuration directives with a ,:
# iocage set ip4_addr="em0|10.1.1.10/24,em0|10.1.1.11/24" examplejail1
Start the jail
iocage start examplejail1

...Und das wars
 
Du kannst ja auch den Host und die Jails im gleichen privaten Netz betreiben, dann brauchst du natürlich kein NAT.
 
Zurück
Oben