RPi3+, Jail, IPFW und NAT

tatoolz

Active Member
Hallo Forum,
ich habe hier einen RPi3+. Auf diesem soll eine Jail mit NAT laufen. Dazu ist die vorgabe IPFW (Ja ich weiß, PF, aber das steht aufgrund Vorgaben nicht zur Debatte)

Folgendes ist gegeben:

Gateway: 192.168.2.1

RPi3+: 192.168.2.35 / 255.255.255.0
Jail: 10.0.0.2 ( /usr/jails/jail2icinga )


Folgende configs:

/etc/rc.conf:

hostname="raspberrypi3"
ifconfig_ue0="inet 192.168.2.35 netmask 255.255.255.0"
defaultrouter="192.168.2.1"

sshd_enable="YES"

sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

growfs_enable="YES"

#JAILS
jail_enable="YES"

#IPFW
firewall_enable="YES"
firewall_type="open"

#NAT
cloned_interfaces="lo1"
ifconfig_lo1_alias0="inet 10.0.0.2 netmask 255.255.255.0"
gateway_enable="YES"

/etc/jail.conf:
exec.start="/bin/sh /etc/rc";

exec.stop="/bin/sh /etc/rc.shutdown";

exec.clean;

mount.devfs;

# Netzwerkkarte
interface="lo1";

jail2icinga {
host.hostname = "jail2icinga.local";
path = /usr/jails/jail2icinga;
ip4.addr = "10.0.0.2";
allow.raw_sockets=1;
allow.chflags;
allow.mount.procfs;
allow.mount.devfs;
}

/etc/sysctl.conf:
# ALLOW JAIL RAW SOCKETS
security.jail.allow_raw_sockets=1

# ALLOW UPGRADES IN JAIL
security.jail.chflags_allowed=1

security.jail.sysvipc_allowed=1
net.inet.ip.forwarding=1

Da ich bei IPFW das Profil "open" gewählt habe, sollte hier ja keine extra config von Nöten sein.

Hier noch ifconfig:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet 10.0.0.2 netmask 0xffffffff
groups: lo
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
ether b8:27:eb:b5:d1:a3
inet 192.168.2.35 netmask 0xffffff00 broadcast 192.168.2.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

% uname -a
FreeBSD raspberrypi3 12.0-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC arm64

Problem: Aus der Jail kann keine Netzwerk Kommunikation aufgebaut werden (Ping auf IP und FQDN funktioniert nicht), vom Mainhost ist dies kein Problem. Wo liegt hier der fehler?
 
Kleine Anmerkungen:

1.)
sysctl security.jail.sysvipc_allowed=1
das ist nicht mehr nötig, du kannst in der jail.conf im Jail-Block folgendes definieren:

Code:
sysvshm = new;
sysvsem = new;

2.)
# ALLOW JAIL RAW SOCKETS
security.jail.allow_raw_sockets=1
Nicht mehr nötig, wie oben kannst du folgendes definieren:

Code:
allow.raw_sockets;

3.)
# ALLOW UPGRADES IN JAIL
security.jail.chflags_allowed=1
Wozu das? Ich würde ein Jail immer "von Außen" aktualisieren.

Rob
 
Ich habe das nun mal wie folgt abgeändert / ergänzt:

/etc/rc.conf:
#IPFW
firewall_enable="YES"
#firewall_type="open"
firewall_nat_enable="YES"
firewall_script="/etc/ipfw.conf"

/etc(ipfw.conf:
# Das Kommando
cmd="/sbin/ipfw -q"

# Unsere Netzwerkkarte
lan_if="ue0"

# Unsere externe IP-Adresse
ipaddr="192.168.2.35/24"

# Das VM-Netzwerk
vm_net="10.0.0.0/28"

# -------------------------------------------------------- #

# Alles rauswerfen
$cmd flush
$cmd queue flush
$cmd pipe flush

# -------------------------------------------------------- #

# Alles was einen State hat darf durch
$cmd add 10 check-state

# Vom Host auf die VMs
$cmd add 20 allow all from me to $vm_net setup keep-state

# -------------------------------------------------------- #

# NAT
$cmd nat 1 config if $lan_if

$cmd add 50 nat 1 all from $vm_net to not $vm_net
$cmd add 60 nat 1 all from any to $ipaddr

# -------------------------------------------------------- #

# Alles durchlassen
$cmd add 70 allow all from any to any

resolv.conf:
search speedport.io
nameserver 192.168.2.1

jail resolv.conf:
nameserver 192.168.2.35


ping auf eine IP aus der Jail:

ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=124 time=16.370 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=124 time=16.445 ms

auf eine Adresse:
ping google.com
ping: cannot resolve google.com: Host name lookup failure


Wo liegt der fehler? Ich habe nun alles durchgeschaut. Evtl hätte noch jemand einen Tipp. Besten dank.
 
Ich tippe mal darauf, dass auf dem Host kein Nameserver läuft, weshalb du einfach auch 192.168.2.1 in die /etc/resolv.conf in der Jail eintragen solltest.
 
Hi nochmals,

RPi3+: 192.168.2.35 / 255.255.255.0
Jail: 10.0.0.2 ( /usr/jails/jail2icinga )

Ich würde das z.B. gar nicht trennen. Ich würde dem Jail ebenso eine Adresse aus 192.168.2.35/24 geben und die Adresse an das Hostinterface binden. Damit sparst du dir das NAT auf dem Host. Die Firewall ist dennoch nutzbar, um das Jail zu isolieren.

Rob
 
Zurück
Oben