Ausgangslage :
Zwei Netzwerkarten mit 2 seperaten Netzwerkadressen, und 2 Gateways. Dazu reichlich Jails, die auf die beiden Netzwerkarten verteilt sind.
Aufgabenstellung:
Für jede Netzwerkkarte eine eigene Defaultroute, oder alternativ für jedes Jail ein eigenes Default Gateway.
Hier ein Lösungsansatz : http://forums.freebsd.org/showthread.php?t=19607
Zum Verständnis:
Wir setzten für ein bestimmes Jail eine alternative Netzwerkansicht. Sprich, wir weisen einem speziellen Jail eine eigene Routingtabelle (inkl. Default Gateway) zu. Normalerweise verwendet das Jail die Routing Tabelle des Hosts. Damit können wir jedem Jail sein eigenes Routing zuweisen.
Dafür müssen wir zuerst unseren Kernel um eine Option erweitern, und neu kompilieren. Siehe hier: http://www.freebsd.org/doc/handbook/kernelconfig-building.html
# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/KAGEROU1 # ln -s /root/kernels/KAGEROU1
Jetz editieren wir die Datei KAGEROU1 und fügen am Ende folgende Zeilen hinzu.
options ROUTETABLES=4 # default is 1, max 16
Damit sorgen wir dafür das unser handgemachter Kernel 4 unterschiedliche Routingtabellen zur Verfügung stellen kann. Nun noch den Kernel kompilieren und instalieren.
# cd /usr/src # make buildkernel KERNCONF=KAGEROU1 # make installkernel KERNCONF=KAGEROU1
Nun einen Reboot.
Als nächstes müssen wir unserem Jail eine alternative Netzansicht verpassen. In der Standardkonfiguaration sieht er FIB 0. Wir weisen ihm FIB 1 zu .
ezjail-admin config -f 1 csg
Die Änderung tritt erst nach einem Neustart des Jails ein. Jetzt noch schnell die Netzkonfiguration von FIB 1 anpassen.
kagerou# setfib 1 route add default 192.168.0.1
Oder man kann auch eine shell unter der FIB 1 starten und dannn dort arbeiten:
kagerou# setfib 1 tcsh kagerou# netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.0.1 UGS 0 0 xl0 10.8.0.2 link#5 UH 0 0 tun0 ..................................... kagerou# exit exit
und das Jail neu starten
kagerou# ezjail-admin stop csg kagerou# ezjail-admin start csg
Nun sollte das natürlich bei jedem Bootup automatisch geschehen. Nur wo tragen wir das ein ? Wenn man man ezjail aufruft sieht man:
NOTES
ezjail.sh enforces the execution of /etc/rc.d/jail, by prepending "one"
to the start, restart, and stop commands so it is NOT NECESSARY to set
jail_enable in the /etc/rc.conf config file.Also fügen wir in die Datei /etc/rcd./jail am ANFANG folgende Zeile ein:
................... # WARNING: This script deals with untrusted data (the data and # processes inside the jails) and care must be taken when changing the # code related to this! If you have any doubt whether a change is # correct and have security impact, please get the patch reviewed by # the FreeBSD Security Team prior to commit. start_precmd="setfib 1 route add default 192.168.0.1" stop_postcmd="setfib 1 route delete default 192.168.0.1" .................................
Und hier noch ein Ansatz . http://www.mail-archive.com/freebsd-jail@freebsd.org/msg01161.html oder http://www.unix.com/man-page/FreeBSD/1/setfib/