Router tut alles nur nicht routen

MIKQ

Active Member
Hallo,

ich habe mir mal wieder eine neue OpenBSD 4.2 (sic!) Mühle als Router zusammengebastelt immer schön am Leitfaden http://wiki.bsdforen.de/howto/dsl-router

entlang.

Leider habe ich 2 Probleme und weiss nicht ob diese zusammenhängen:
Der DHCP Server will nicht. Im "howto/dsl-router" wird diese automatisch per /etc/rc.conf.local "dhcpd_flags="-q" gestartet.
Das gibt beim booten eine Fehlermeldung a la: "dhcpddhcpd option --q unknown"

Von Hand
Code:
# touch /var/db/dhcpd.leases
# /usr/sbin/dhcpd <internes_device>
läßt sich der DHCP zwar anstarten. verteilt aber trotzdem keine Ip Adressen.
Fehlermeldung: Keine.

Also flugs die IPs fest vergeben um sich im Internet nach Hilfe umsehen zu können.
Ich kann den neuen Router auch pingen, mich per SSH verbinden alles kein Problem.
Der Router ist auch im Inet auch kein Problem.
Nur NAT/Routn tut er trotz
Code:
sysctl -w net.inet.ip.forwarding=1
nicht.
Keine Fehlermeldung kein Kommentar, es geht einfach nicht.
Wo kann ich noch Fehlermeldungen einsehen?
Was könnte die Ursache sein?
Gruß
Q
 
Zuletzt bearbeitet:
hast du den dhcp-range angegeben in der config Denke verwendest Isch

wenn beides nicht geht...stimmt den dein Interface bzw. Name der Netzwerkkarte
 
Zuletzt bearbeitet:
Ich muss nochmal um eure Hilfe bitten, da ich einfach nicht weiß wo ich suchen soll.

So wie es aussieht funktioniert der DNS zumindest für den Router, aber egal ob mit Namen oder IP, kein Client im Netz kommt „raus“
Extern NIc soll sein: Intel Netzwerkarte fxp0
Interne NIC 3Com Zusatz NIC xl0.
Wie gesagt ich komme mit Poderosa/Putty wunderbar an den Router. Der kann auch toll rauspingen in die Welt, schein also prima per tun0 -> DSL verbunden zu sein.

Ip.forwarding behauptet auch steif und fest aktiviert zu sein.:confused:
Was mache ich falsch?

Da ich mit meinem Latein ziemlich am Ende bin würde ich sogar jemandem Zugang zu der Kiste gewähren. Wenn NAT nämlich nicht läuft kann ich die eh in die Tone kloppen.

Bitte Hilfe/ Hilfe zur Selbsthilfe. Was kann ich machen um den Fehler wenigstens zu analysieren?

Anbei die Ausgaben von ifconfig/ ping und ipconfig

Code:
PING www.openbsd.org (129.128.5.191): 56 data bytes
64 bytes from 129.128.5.191: icmp_seq=0 ttl=241 time=230.920 ms
64 bytes from 129.128.5.191: icmp_seq=1 ttl=241 time=234.761 ms
--- www.openbsd.org ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 230.920/232.840/234.761/1.980 ms
root@zaphod:~\>

root@zaphod:~\>ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33208
        groups: lo
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:30:05:21:32:96
        media: Ethernet 100baseTX
        status: active
        inet6 fe80::230:5ff:fe21:3296%fxp0 prefixlen 64 scopeid 0x1
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:50:04:6b:37:bd
        media: Ethernet autoselect (100baseTX full-duplex)
        status: active
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::250:4ff:fe6b:37bd%xl0 prefixlen 64 scopeid 0x2
enc0: flags=0<> mtu 1536
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
        groups: tun egress
        inet 213.196.211.195 --> 213.196.211.1 netmask 0xffffffff
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
        groups: pflog
root@zaphod:~\>
        
root@zaphod:~\>sysctl -w net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1


Windoof
ipconfig:
        Ethernetadapter Realtek RTL8166 PCI Gigabit Ethernet:

        Verbindungsspezifisches DNS-Suffix:
        IP-Adresse. . . . . . . . . . . . : 192.168.1.15
        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
        Standardgateway . . . . . . . . . : 192.168.1.1
 
hmmmm

Die pf Rules werden tatsächlich nicht geladen.
Er meckert über 2 Zeilen:

Direkt die erste betrifft NAT:
Code:
# NAT aktivieren (unter Linux als Masquerading bekannt)
    nat on $Ext from $IntNet to any -> $Ext static-po
“could not parse host specification”


Und über die letzte regt er sich noch auf:

Code:
# Raus darf (fast) alles
    pass out quick on $Ext keep state queue (q_def,q_pri)
“syntax error”

Die beiden Zeilen habe ich 1zu1 übernommen, nix dran gedreht…
Gesehen habe ich die Fehler erst als ich wieder einen Monitor angeklemmt habe.
Im dmesg tauchen solche Fehlermeldungen ja leider nicht auf....

Meine vollständige pf.conf ist diese:
Code:
  ### VARIABLEN ###
 
    Ext = "tun0"            # Device an dem das Internet angeschlossen ist 
    Int = "xl0"      # Device an dem das interne Netz haengt
    IntNet = "192.168.1.0/24"      # Adressraum des internen Netzes
    RouterIP = "192.168.1.1"       # IP Adresse des Routers
    Loop = "lo0"                   # Loopback Device
 
    # Adressen die auf dem externen Device nicht geroutet werden
    # (Adressbereich des internen Netzes muss man wegen der Weiterleitungen zulassen)
    table <NoRoute> { 127.0.0.1/8, 172.16.0.0/12, 192.168.0.0/16, !$IntNet, 10.0.0.0/8, 255.255.255.255/32 }
 
    # Ports die geoeffnet werden sollen
    InServicesTCP = "{ ssh, ftp, auth }"
 
 
    ### OPTIONS ###
 
    # Macht Statistiken fuer die DSL-Verbindung (pfctl -s info)
    set loginterface $Ext
 
    # Beendet inaktive Verbindungen schneller - geringerer Speicherverbrauch.
    set optimization aggressive
 
    # Fragmentierte Pakete saeubern
    scrub on $Ext all fragment reassemble random-id
 
    # Queueing 
    # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    # !! Achtung: Der unten stehende Wert von 100Kb (Kilobit) macht natuerlich
    # !! nur fuer den Standard DSL Anschluss mit 128kb upstream Sinn. Hat man
    # !! eine Verbindung mit groesserer Bandbreite beim upload, dann muss 
    # !! dieser Wert entsprechend angepasst werden. 
    # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    altq on $Ext priq bandwidth 490Kb queue { q_pri, q_def }
    queue q_pri priority 7
    queue q_def priority 1 priq(default)
 
 
    ### NAT & FORWARD ###
 
    # NAT aktivieren (unter Linux als Masquerading bekannt)
    nat on $Ext from $IntNet to any -> $Ext static-port
 
    # Active FTP - Umleitung zu unserem ftp-proxy
    rdr on $Int proto tcp from !$RouterIP to !$IntNet port 21 -> 127.0.0.1 port 8021
 
    rdr-anchor "redirect/*"
  
    ### FILTER ###
 
    # Zum Debuggen....
    #pass quick all             # Alles durchlassen
 
    # Generelle Block Regel
    block on $Ext
 
    # Freiwillig machen wir keinen mucks ;)
    block return log on $Ext
 
    # Wir wollen kein IPv6.0
    block quick inet6
 
    # Loopback Device darf alles
    pass quick on $Loop
 
    # IP Spoofing verhindern
    block in log quick on $Ext inet from <NoRoute> to any
    block in log quick on $Ext inet from any to <NoRoute>
 
    # Active FTP erlauben
    pass in quick on $Ext inet proto tcp from any to any port > 49151 user proxy flags S/SAFR keep state
 
    # Ping akzeptieren (ablehnen ist uebrigends wenig sinnvoll)
    pass in quick on $Ext inet proto icmp all icmp-type 8 code 0 keep state
 
    # Ports nach aussen oeffnen
    pass in quick on $Ext inet proto tcp from any to any port $InServicesTCP flags S/SAFR keep state label ServicesTCP
  
    anchor "passin/*"
 
    # Raus darf (fast) alles
    pass out quick on $Ext keep state queue (q_def,q_pri)
 
Zuletzt bearbeitet:
Kann es daran liegen dass ich noch das "Userland" pppoE nutze?
Wollte das bei nächster Gelegenheit gegen eine /etc/hostname.pppoe tauschen.
Direkt nachdem der DHCP Server läuft. *sigh* :ugly:

Nachtrag:

Code:
nat on $Ext from $IntNet to any -> ($Ext) static-port

behebt schon mal den ersten Fehler. Zumindest keine Fehlermeldung dafür mehr.
Nur wo ist der Syntax Error in der letzten Zeile?
Und für ein paar erklärende Worte wäre ich auch dankbar..
<grunt>
What does it all mean?
</grunt>
 
Zuletzt bearbeitet:
Nun ja das Problem ist das ext_if keine Ip Adresse hatte als du den Rechner gestartet hast und die "()" sagen jetzt dem pf, das er sie automatische "updaten" soll, d.h. wenn dein Rechner sich ins inet gewählt dann bemerkt das auch pf. ;)
Und jetzt einfach das ext_if in der letzten Zeile auch noch in () setzten ;)
 
Das war es leider nicht.

Habe folgende Änderung vorgenommen:
Code:
pass out quick on ($Ext) keep state queue (q_def,q_pri)

Immer noch Syntax Fehler...
 
Zuletzt bearbeitet:
Ach sry ich meinte auch ext. X.x

Mh also einen Fehler kann ich bis jetzt nicht finden. Vllt solltest du erstmal versuchen das "quick" zu entfernen und wenn das nicht hilft das komplette altq zeug. also zb das "queue (q_de..." Das ist ja erstmal nicht zwingend nötig.
Sonst hab ich nichts gesehen. *grübel*
 
also

Ich habe mir folgenden Artikel mal reingezogen:
http://www.bsdforen.de/showthread.php?t=1857

Der passte leider ziemlich gut....
also flugs mit
Code:
pfctl -d
die Firewall deaktiviert.
Trotzdem geht kein ping von einem internen Rechner zu einem Rechner im Inet. Nur vom Router zum Inet funktioniert.

Danach soll ich per tcpdump den Netzwerkverkehr mitschneiden.
Damit bin ich ein wenig überfordert.
Ich habe probiert:

Code:
# tcpdump -a -i tun0 -i xl0
schneidet zum einen nur xl0 mit zum anderen kommt dabei viel zu viel raus.
( Was ich vermisse (vor allem bei den man pages) sind 2-3 aussagekräftige Beispiele mit den sinnvollsten Optionen. )

Ich stecke also immer noch bei:
Code:
3) - pfctl -d (deaktivieren der Firewall) - wessen Paranoia das nicht "zulässt" lädt bitte eine pf.conf dieser Art:

Code:

block in log quick on $ext_if all pass out on $ext_if all keep state pass in on $int_if all keep state

- ping(8) von Host zu "Rechner im Internet" - dabei sollte "sicher" sein,
dass dieser Rechner auch auf pin antwortet: Mein "Liebling" dafuer
ist 193.0.0.193 (ns.ripe.net, aber immer nur die IP verwenden! Gerade
diese sollte man sich ja merken können ;-) )

Dabei tcpdump wie oben auf das LAN-if und auf das externe. Bei
ppp/pppoe ist das dann ppp0 bzw tun0 und nicht das physikalische
Interface!

- Mögliche Szenarien (icmp echo request/reply ist ping(8)):
fest.....
 
Ne so funktioniert das nicht. Die Fw muss schon laufen, sonst funktioniert das NAT nicht. ;)
Versuch mal eine mehr minimalere Version von der pf.conf. zb:

Code:
### VARIABLEN ###
 
    Ext = "tun0"            # Device an dem das Internet angeschlossen ist 
    Int = "xl0"      # Device an dem das interne Netz haengt
    IntNet = "192.168.1.0/24"      # Adressraum des internen Netzes
    RouterIP = "192.168.1.1"       # IP Adresse des Routers
    Loop = "lo0"                   # Loopback Device
 
    # Adressen die auf dem externen Device nicht geroutet werden
    # (Adressbereich des internen Netzes muss man wegen der Weiterleitungen zulassen)
    table <NoRoute> { 127.0.0.1/8, 172.16.0.0/12, 192.168.0.0/16, !$IntNet, 10.0.0.0/8, 255.255.255.255/32 }
 
    # Ports die geoeffnet werden sollen
    InServicesTCP = "{ ssh, ftp, auth }"
 
 
    ### OPTIONS ###
 
    # Macht Statistiken fuer die DSL-Verbindung (pfctl -s info)
    set loginterface $Ext
 
    # Beendet inaktive Verbindungen schneller - geringerer Speicherverbrauch.
    set optimization aggressive
 
    # Fragmentierte Pakete saeubern
    scrub on $Ext all fragment reassemble random-id
!!!!!!!!!!!! 
 
    ### NAT & FORWARD ###
 
    # NAT aktivieren (unter Linux als Masquerading bekannt)
    nat on $Ext from $IntNet to any -> ($Ext) static-port

   # Zum Debuggen....
   pass quick all             # Alles durchlassen
und dann mal wieder mit
# pfctl -e -f /etc/pf.conf
den Paketfilter wieder aktivieren. Und dann kannst du ja, falls das funktioniert, die Regeln wieder erweitern.
 
Danke. Werde ich versuchen. Sobald ich wieder zu Hause bin so in 3-4 Tagen :-) Ist also nur aufgeschoben. Nicht aufgehoben!
Trotzdem schon mal vielen Dank.

Aber wenn du schreibst "so funktioniert das nicht"
Ist dann die Aussage:
Code:
3) - pfctl -d (deaktivieren der Firewall) - wessen Paranoia das nicht "zulässt" lädt bitte eine pf.conf dieser Art:

Code:

block in log quick on $ext_if all pass out on $ext_if all keep state pass in on $int_if all keep state

- ping(8) von Host zu "Rechner im Internet" - dabei sollte "sicher" sein,
dass dieser Rechner auch auf pin antwortet: Mein "Liebling" dafuer
ist 193.0.0.193 (ns.ripe.net, aber immer nur die IP verwenden! Gerade
diese sollte man sich ja merken können ;-) )

Dabei tcpdump wie oben auf das LAN-if und auf das externe. Bei
ppp/pppoe ist das dann ppp0 bzw tun0 und nicht das physikalische
Interface!

- Mögliche Szenarien (icmp echo request/reply ist ping(8)):

a) LAN: icmp echo request - kein reply

tun0: "nix"

--> entweder ist die Firewall immer noch aktiv, oder "falsches" rule
set geladen (mit "pfctl -sr" nachgucken)

b) LAN: icmp echo request - kein reply

tun0: icmp echo request - kein reply

--> In 99.9% der Faelle hat man im LAN "private" (RFC1918) Adressen, auf die 193.0.0.193 nicht antworten - aber "von innen nach
außen" geht schonmal ;-)

Also mal noch NAT dazu. Vor die oben genannten pf rules noch
Code:

nat on $ext_if all -> ($ext_if)

Im tcpdump auf tun0 sollte nun als Absenderadresse des request
die IP von tun0 auftauchen - wenn nicht, stimmt was mit pf nicht.

falsch?
Und wie verwende ich tcpdump richtig um für beide Interfaces tun0 und xl0 (intern) einen dump am besten in eine Datei
Code:
"tcpdump xyz >> /usr/meinlog.log"
zu schreiben in dem dann nur soviel drin steht dass ich das auch Stück für Stück nachvollziehen kann?
Was sind sinnvolle Parameter für xyz?
Kann ich überhaupt beide Interfaces gleichzeitig mitschneiden?
Bin leider nun mal kein Unix-Gott.
Aber willens zu lernen.

Grüße
 
tcpdump

Und wie verwende ich tcpdump richtig um für beide Interfaces tun0 und xl0 (intern) einen dump am besten in eine Datei
Code:

"tcpdump xyz >> /usr/meinlog.log"

zu schreiben in dem dann nur soviel drin steht dass ich das auch Stück für Stück nachvollziehen kann?
Was sind sinnvolle Parameter für xyz?
Kann ich überhaupt beide Interfaces gleichzeitig mitschneiden?

2 NICs gleichzeitig in 2 Befehlsfenster der Konsole.

#tcpdump -i xl0 -nN -w /usr/meinlog.log src net xxx.xxx.xxx.xxx and dst net xxx.xxx.xxx.xxx

Stoppen:
#ctrl t
#ctrl c


Lesen:
#tcpdump -r /usr/meinlog.log | more

Siehe auch: man tcpdump
 
Zuletzt bearbeitet:
SUPER! Danke für die vielen Anregungen! Man kaum bin ich nicht zu Hause kommen die besten Ideen :cool:

Code:
Dumme Vermutung: Newline in der letzten Zeile vergessen?

Bin ich schon so oft drauf reingefallen.
Muss ich SOFORT ausprobieren arrrgh kann ich ja gar nicht:grumble:

Vielen Dank, frohes neues Jahr euch allen, sobald ich wieder die Finger am Router habe werde ich mich auf Käfersuche begeben.

Q
 
Juhu ein Problem weniger

Was soll ich sagen..
oenone hatte Recht.
Ein Newline Problem… schon wieder ....peinlich peinlich…

Nun habe ich versucht pf zu deaktivieren mit:
Code:
pfctl –d
Und wieder zu starten mit:
Code:
pfctl -R -f /etc/pf.conf
Fehlermeldung:
Code:
pfctl: Must enable table loading for optimizations
Meine Versuche mit:
Code:
pfctl -onone -f /etc/pf.conf
oder ohne –R
Code:
pfctl -f /etc/pf.conf
waren leider auch erfolglos.

Wie startet man den in 4.2 pf neu ?

Vielen Dank für eure Hilfe
Q
 
enable und danach ein pfctl -f /etc/pf.conf oder direkt pfctl -e -f /etc/pf.conf oder macht das gar keinen Unterschied... <duckundweg> ;)
 
"pfctl -e" + "pfctl -f /etc/pf.conf" => "pfctl -e -f /etc/pf.conf", ... d. h. kein Unterschied

Aber besser ist Folgendes: pfctl -Fa -e -f /etc/pf.conf
 
Zuletzt bearbeitet:
Zurück
Oben