Port auf Jail per ipfw und natd weiterleiten

Noteip

Member
Hallo FreeBSD Gemeinde,

da ich nun schon seit Stunden dran sitz und noch keinen Millimeter weiter bin, brauche ich nun doch eure Hilfe.

Folgende Konfiguration:
Strato FreeBSD Server (6.2) mit einer externen IP.

Jail:
IP: 192.168.0.1 mit SSH (Port 2222)
Die Jail läuft soweit auch und ich kann mich vom Server auf die Jail per ssh 192.168.0.1 -p2222 ohne Probleme verbinden.

Mein Problem ist nun, wie ich eine Anfrage von meiner externen IP z.B. auf Port 2222 an die Jail (Port 2222) weiterleite.

Hier meine Konfigurationsdateien:
Host:
/etc/rc.conf
Code:
ifconfig_fxp0="inet 85.214.57.XX netmask 255.255.0.0"

ifconfig_fxp0_alias0="inet 192.168.0.1 netmask 255.255.0.0"

firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
firewall_logging="YES"

natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="fxp0"
natd_flags="-dynamic -f /etc/firewall/natd.conf"

jail_enable="YES"
jail_list="www"
jail_www_rootdir="/jail/www"
jail_www_hostname="www.mein-hostname.de"
jail_www_ip="192.168.0.1"
jail_www_exec="/bin/sh /etc/rc"
jail_www_devfs_enable="YES"
jail_www_devfs_ruleset="devfsrules_jail"

/etc/firewall/fwrules
Code:
#!/bin/sh

fwcmd="/sbin/ipfw"
${fwcmd} -f flush

open_ports="2222,22"

setup_loopback () {
        ############
        # Only in rare cases do you want to change these rules
        #
        ${fwcmd} add 100 pass all from any to any via lo0
        ${fwcmd} add 200 deny all from any to 127.0.0.0/8
        ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any
}

        # set these to your outside interface network and netmask and ip
        oif="fxp0"
        onet="85.214.57.0"
        omask="255.255.0.0"
        oip="85.214.57.XX"

        setup_loopback

        # natd
        ${fwcmd} add 10 divert natd all from any to any via fxp1

        # Stop RFC1918 nets on the outside interface
        ${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif}
        ${fwcmd} add deny all from any to 172.16.0.0/12 via ${oif}
        ${fwcmd} add deny all from any to 192.168.0.0/16 via ${oif}

        # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
        # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
        # on the outside interface
        ${fwcmd} add deny all from any to 0.0.0.0/8 via ${oif}
        ${fwcmd} add deny all from any to 169.254.0.0/16 via ${oif}
        ${fwcmd} add deny all from any to 192.0.2.0/24 via ${oif}
        ${fwcmd} add deny all from any to 224.0.0.0/4 via ${oif}
        ${fwcmd} add deny all from any to 240.0.0.0/4 via ${oif}

        # Stop RFC1918 nets on the outside interface
        ${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif}
        ${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif}
        ${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif}

        # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
        # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
        # on the outside interface
        ${fwcmd} add deny all from 0.0.0.0/8 to any via ${oif}
        ${fwcmd} add deny all from 169.254.0.0/16 to any via ${oif}
        ${fwcmd} add deny all from 192.0.2.0/24 to any via ${oif}
        ${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif}
        ${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif}

        # Allow TCP through if setup succeeded
        ${fwcmd} add pass tcp from any to any established

        # Allow IP fragments to pass through
        ${fwcmd} add pass all from any to any frag

        # Allow access to our DNS
        ${fwcmd} add pass tcp from any to ${oip} 53 setup
        ${fwcmd} add pass udp from any to ${oip} 53
        ${fwcmd} add pass udp from ${oip} 53 to any

        # Allow access to our open_ports
        ${fwcmd} add pass tcp from any to ${oip} ${open_ports} setup

        # Reject&Log all setup of incoming connections from the outside
        ${fwcmd} add deny log tcp from any to any in via ${oif} setup

        # Allow setup of any other TCP connection
        ${fwcmd} add pass tcp from any to any setup

        # Allow DNS queries out in the world
        ${fwcmd} add pass udp from ${oip} to any 53 keep-state

        # Allow NTP queries out in the world
        ${fwcmd} add pass udp from ${oip} to any 123 keep-state

/etc/firewall/natd.conf
Code:
redirect_port tcp 192.168.0.1:2222 2222
redirect_port udp 192.168.0.1:2222 2222

EDIT:
Jail Konfiguration:
Code:
rpcbind_enable="NO"
network_interface=""
hostname="www.noteip.info"
sendmail_enable="NONE"
sshd_enable="YES"
sshd_flags="-p 2222"

Hab auch schon versucht in der Jail per tcpdump zu schaun, ob Pakete angekommen, aber nichts hat funktioniert ;'(

Hat jemand von euch einen Tipp, wie ich diese Konfiguration zum Laufen bringen könnte?

Gruß Markus
 
Zuletzt bearbeitet:
Ich finde es komisch, dass du per ssh überhaupt auf deine Jail zugreifen kannst.:confused:
Dein Server hat 2 physikalische NICs (fxp0 und fxp1)?

Üblicherweise werden die IP-Adressen der Jails über aliases definiert (/etc/rc.conf):

Code:
ifconfig_fxp0="inet 85.214.57.XX netmask 255.255.0.0"
ifconfig_fxp1="inet 192.168.0.100 netmask 255.255.255.0"
ifconfig_fxp1_alias0="inet 192.168.0.1 netmask 255.255.255.255"
...

Für die Jail ist eine Subnetzmaske von 255.255.255.255 unablässig.

mousaka
 
Ja, fxp0 und fxp1:

Code:
fxp0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 85.214.57.XX netmask 0xffff0000 broadcast 85.214.255.255
        ether 00:30:48:53:e2:9e
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.0.1 netmask 0xffff0000 broadcast 192.168.255.255
        ether 00:30:48:53:e2:9f
        media: Ethernet autoselect (none)
        status: no carrier
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000

Zu SSH: Oben hab ich meine Jail rc.conf noch angehängt.
 
Du vergibst die IP-Adresse 192.168.0.1 zwei mal:belehren:
  • für fxp1
  • für www-Jail

Da kann aus meiner Sicht nicht funktionieren, darum die aliases.

mousaka
 
ach so :grumble: eben versteh ich was es mit aliases auf sich hat!!!

Werde das gleich mal ausprobieren. Danke!!!

EDIT:
Allerdings funktioniert es immer noch nicht. Also der Port wird immer noch nicht durchgereicht.
 
Ich finde es komisch, dass du per ssh überhaupt auf deine Jail zugreifen kannst.
In der sshd-Standardkonfiguration (/etc/ssh/sshd_config) hört der ssh-Server auf alle Anfragen über den Port 22 respektive 2222, egal welche IP-Adresse (Host-sshd: *.*.*.*:22, Jail-sshd *.*.*.*:2222)!
 
Ich finde es komisch, dass du per ssh überhaupt auf deine Jail zugreifen kannst.
Dein Server hat 2 physikalische NICs (fxp0 und fxp1)?

Lokal ist doch klar das dies geht, da es wie üblich eine route zu der 192.168.0.1/24-Adresse gibt.

rout get 192.168.0.1

Üblicherweise werden die IP-Adressen der Jails über aliases definiert (/etc/rc.conf):

Code:
ifconfig_fxp0="inet 85.214.57.XX netmask 255.255.0.0"
ifconfig_fxp1="inet 192.168.0.100 netmask 255.255.255.0"
ifconfig_fxp1_alias0="inet 192.168.0.1 netmask 255.255.255.255"
...

behauptet wer?

Für die Jail ist eine Subnetzmaske von 255.255.255.255 unablässig.

ebenfalls wer behauptet das?

Beides ist (sorry) Quatsch.

Angenommen der Fall in dem RZ gibt es ein Lokales Netz[192.168.0/24] (für zB. Backups), Was Physikalisch vom Internet getrennt ist.
So würde es durchaus einen Sinn erfüllen die IP auf das "private" Interface zu binden.

Ob nun als Alias oder nicht, wo ist da der Unterschied?
(Hast Du mal im laufendem Betrieb eine IP über die du remote auf die Büxe kommst geändert? Wenn nein, denk mal drüber nach wie man das anstellen könnte.)

Und in diesem Szenario wollte man auch kein 1-Rechner Netz (255.255.255.255)...

Die Jail ist es letzendlich total banane ob es ein alias oder nicht ist, es sieht nicht mal nen Unterschied. Das gleiche gilt fürs SubNetz.

Du vergibst die IP-Adresse 192.168.0.1 zwei mal

* für fxp1
* für www-Jail


Da kann aus meiner Sicht nicht funktionieren, darum die aliases.

Auch nicht korrekt.

Erst mal wird die IP vergeben (an ein Interface), ein jail wird diese nur noch Zugeteilt (ein Jail startet sogar, wenn ihm eine IP zugewiesen wurde die gar nicht existiert).

Sprich ein jail bindet keine weitere IP an ein Interface.
/ect/rc.d/jail kann zwar über /etc/rc.conf definierte IPs binden, diese werden dann aber auch nur vorm eigentlichen start der Jail an das Interface gebunden.

Hier in dem Fall ist die IP an fxp1 gebunden und das Jail bekommt diese dann halt Zugeteilt. Technisch gesehen erst mal gar kein Problem.


Hier in dem fall ist die private Adresse allerdings nicht wirklich günstig auf fxp1 da die ja per Nat mit der Public-Adresse über fxp0 rausgehen soll. Hier würde ein Alias auf dem Interface fxp0 sinnvoller sein.

Das würde ich ändern und dann erst mal testen ob man überhaupt aus dem Jail ins Netz kommt (um überhaupt erst mal zu wissen das Nat allgemein schon mal funktioniert).

Aron
 
Zuletzt bearbeitet von einem Moderator:
Danke rosa.

Nachdem ich nun die Konfiguration folgendermaßen umgestellt habe:

Code:
ifconfig_fxp0_alias0="inet 192.168.0.1 netmask 255.255.0.0"

habe ich in der Jail versucht ein Paket zu installieren: "pkg_add -r wget".

Das Ergebnis war, dass er nicht ins INET kam. Hat noch jemand eine Idee, was ich falsch gemacht haben könnte?

EDIT:
Ist es normal, dass folgendes Ergebnis rauskommt bei einem route get rauskommt?
Code:
> route get 192.168.0.1 (DIES IST DIE JAIL IP)
   route to: 192.168.0.1
destination: 192.168.0.1
  interface: lo0
      flags: <UP,HOST,DONE,LLINFO,WASCLONED,LOCAL>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0
> route get 192.168.0.2 (DIESE IP GIBT ES NICHT)
   route to: 192.168.0.2
destination: 192.168.0.0
       mask: 255.255.0.0
  interface: fxp0
      flags: <UP,DONE,CLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      -374
> route get 85.214.57.XX (DIES IST MEINE ÖFFENTLICHE IP)
   route to: noteip.info
destination: 85.214.0.0
       mask: 255.255.0.0
  interface: fxp0
      flags: <UP,DONE,CLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      -425
>
 
Vielen Dank für die Infos. Ich stelle fest, dass mein Wissen über Jails immer noch sehr begrenzt ist. Sorry, wenn ich Quatsch geschrieben habe.

Wenn ich aliase definiere, so müssen diese (und nicht die Jails) eine Subnetmaske von 32 haben. Habe dies irrtümlicherweise gleichgesetzt.
Wenn man mehrere Jails produktiv (sprich im Netz) einsetzten will braucht man für jede Jail ein IP. Darum benötigt man entweder pro Jail eine eigene NIC oder man verwendet aliases. Korrekt?

Hier würde ein Alias auf dem Interface fxp0 sinnvoller sein.
Braucht es dazu nicht eine weitere gültige externe IP-Adresse? Ich nehme an dies ist ein Grund warum Noteip gerne ein NAT verwenden würde.

Nachdem ich nun die Konfiguration folgendermaßen umgestellt habe:

Code:

ifconfig_fxp0_alias0="inet 192.168.0.1 netmask 255.255.0.0"

habe ich in der Jail versucht ein Paket zu installieren: "pkg_add -r wget".

Das Ergebnis war, dass er nicht ins INET kam. Hat noch jemand eine Idee, was ich falsch gemacht haben könnte?
Mit dem Risiko, dass ich erneut falsch liege:
Muss der alias0 nicht auch eine IP im Bereich von 85.214.0.0 haben?

Der noch am Anfang stehende
mousaka
 
Danke rosa.

Nachdem ich nun die Konfiguration folgendermaßen umgestellt habe:

Code:
ifconfig_fxp0_alias0="inet 192.168.0.1 netmask 255.255.0.0"
habe ich in der Jail versucht ein Paket zu installieren: "pkg_add -r wget".

Das Ergebnis war, dass er nicht ins INET kam. Hat noch jemand eine Idee, was ich falsch gemacht haben könnte?

Ja das hab ich mir schon gedacht. Somit ist dein Problem Fundermentaler, da Nat noch gar nicht anschlägt.

EDIT:
Ist es normal, dass folgendes Ergebnis rauskommt bei einem route get rauskommt?
Code:
> route get 192.168.0.1 (DIES IST DIE JAIL IP)
   route to: 192.168.0.1
destination: 192.168.0.1
  interface: lo0
      flags: <UP,HOST,DONE,LLINFO,WASCLONED,LOCAL>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0

Ganz normal: hier wird in der Routingtabelle der Eintrag für 192.168.0.1 local gefunden.

Code:
> route get 192.168.0.2 (DIESE IP GIBT ES NICHT)
   route to: 192.168.0.2
destination: 192.168.0.0
       mask: 255.255.0.0
  interface: fxp0
      flags: <UP,DONE,CLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      -374
Wieder ganz normal, Da du ein 255.255.0.0 Netz der IP auf das fxp0 Interface gegeb hast, liegt die route natürlich auch auf diesem Netz (was an das fxp0 Interface gebunden ist) (In deinem Fall solltest du aber wirklich ein 255.255.255.255, Du suchst ja keine weiteren 192.168.0.0 Kisten).


Code:
> route get 85.214.57.XX (DIES IST MEINE ÖFFENTLICHE IP)
   route to: noteip.info
destination: 85.214.0.0
       mask: 255.255.0.0
  interface: fxp0
      flags: <UP,DONE,CLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      -425

Das gleiche wie bei der 2. Abfrage...

Das Flag -dynamic für NATD brauchst Du nicht, da sich bei dir wohl die IP auf deinem NAT-Interface nicht ändern wird.
Dann in deinen IPFW-Rules:

${fwcmd} add 10 divert natd all from any to any via fxp1

hier soll es wohl eher fxp0 heissen.. weiter bin ich noch nicht gekommen.
 
Vielen Dank für die Infos. Ich stelle fest, dass mein Wissen über Jails immer noch sehr begrenzt ist. Sorry, wenn ich Quatsch geschrieben habe.

Hat eigentlich nichts mit Jail zu tun.

Wenn ich aliase definiere, so müssen diese (und nicht die Jails) eine Subnetmaske von 32 haben. Habe dies irrtümlicherweise gleichgesetzt.

Werder noch. Du kannst einem Alias auch ein ganzes Subnetz zuteilen.


Wenn man mehrere Jails produktiv (sprich im Netz) einsetzten will braucht man für jede Jail ein IP. Darum benötigt man entweder pro Jail eine eigene NIC oder man verwendet aliases. Korrekt?

Korrekt.


Braucht es dazu nicht eine weitere gültige externe IP-Adresse? Ich nehme an dies ist ein Grund warum Noteip gerne ein NAT verwenden würde.

Nö.. was ich alles an IPs auf ein Interface bind ist erst mal total banane.

Mit dem Risiko, dass ich erneut falsch liege:
Muss der alias0 nicht auch eine IP im Bereich von 85.214.0.0 haben?

Nö.
 
[...]
Dann in deinen IPFW-Rules:

${fwcmd} add 10 divert natd all from any to any via fxp1

hier soll es wohl eher fxp0 heissen.. weiter bin ich noch nicht gekommen.

Gesagt getan ... nur ist jetzt der Zugriff auf das? die? Jail total langsam. Wenn ich mich per SSH vom Server aus auf die Jail verbinde, braucht er ca. 50 Sekunden, bis ich das "Passwort" "Feld" zu Gesicht bekomme. Beim Rebooten des ganzen Servers bleibt er auch beim Starten des Jails hängen.

Liegt das an der vergebenen IP? Warscheinlich, oder?
 
ich Tipp auf 30 und nicht 50 Sekunden und das wäre dann DNS-Auflösung die nicht tut.
 
Sag ich doch, sorge mal für eine Namensauflösung. Am einfachsten wohl über die /etc/hosts. Quellen dafür gibt es mehr als genug.
 
Seltsam, denn in meiner /etc/hosts steht folgendes drin:
Code:
::1                     localhost localhost.my.domain
127.0.0.1               localhost localhost.my.domain
85.214.57.XX            h86XXXX.serverkompetenz.net h86XXXX
85.214.71.XX            h86XXXX.serverkompetenz.net h86XXXX

# noteip - jails
192.168.0.1             www.mein-hostname.de
 
Zurück
Oben