Gigaset Go 100 hinter OpenBSD Router betreiben

dennisN86

Member
Grüße,

ich bin auf dieses Forum aufmerksam geworden, da ich auf Suche nach einer Antwort für mein Konfigurationsproblem einer Gigaset Go 100 Box hinter einem OpenBSD Router bin. Hier zur faktischen Ausgangslage:

Ich habe an einem VDSL 50 (o2 myHome M) Anschluss, die von o2 mitgelieferte Box deprecated und durch einen Speedport Smart 2 im Modem Modus + APU2C4 Board mit OpenBSD ersetzt. Mit dem Setup aus SP2 und OpenBSD Router kenne ich mich so weit aus. Da es hier aber um den Anschluss meiner Mutter geht, welche natürlich ein Legacy-Device wie ein Haustelefon benutzt, habe ich Sie auf eine Gigaset Go 100 Box umgestellt. Ein kurzer Blick in die Protokolle rund um SIP, VoIP, RDP hat mir deutlich gemacht, dass ich meine Zeit lieber in andere Teil der Infrastruktur stecken möchte, anstelle ein PBX zu implementieren. Die Gigaset Go 100 soll nun den von o2 mitgelieferten VoIP Anschluss bereitstellen. Leider funktioniert das noch nicht.

Viel Wissenswertes habe ich hier in diesem Thread gelesen: https://www.bsdforen.de/threads/tel...penbsd-internet-deutschlandlan-telekom.34427/

Der Reihe nach:

Der Thread oben beginnt mit dem Hinweis auf sngrep, ein prima Tool, welches die verschiedenen Requests, die über SIP/VoIP laufen, grafisch aufzeigt. In dem Attachment sngrep.txt sieht man den Output des Tools. Der Error Response Code 423 deutet auf ein zu kurzes Intervall für den SIP Request hin. Dieser verschwand, nachdem ich den Wert auf 3600 wie im obigen Thread genannt erhöht habe. 401 - Unauthorized und 403 - Forbidden deuten auf einen Fehler hinsichtlich Zugangsdaten, Passwort bzw. Typo meinerseits oder Angabe in falschem Inputfeld in der GUI hin. Der Frage nach Vertauschen der Inputs gehe ich durch Lesen im o2 Forum nach. Es scheint einige zu geben, welche die Unterschiedlichkeit von o2 sowie Gigaset Naming verwirrt.

Ein guter Hinweis war auch der sich anzuschauen, ob die Firewall Rules in pf.conf etwas blockieren. Das scheint der Fall zu sein.

Code:
router# tcpdump -nettti pflog0

Sep 20 02:03:07.579557 rule 35/(match) pass in on em1: 10.10.10.8.32978 > 62.109.121.1.53: 23107+[|domain]
Sep 20 02:03:07.601903 rule 35/(match) pass in on em1: 10.10.10.8.60594 > 81.173.115.217.80: S 5224129:5224129(0) win 1608 <mss 536> (DF)
Sep 20 02:03:08.579069 rule 35/(match) pass in on em1: 10.10.10.8.123 > 10.10.10.1.123: v4 client strat 0 poll 0 prec 0
Sep 20 02:03:08.607190 rule 35/(match) pass in on em1: 10.10.10.8.60597 > 87.106.115.205.80: S 16217670:16217670(0) win 1608 <mss 536> (DF)
Sep 20 02:03:08.715257 rule 35/(match) pass in on em1: 10.10.10.8.60598 > 87.106.115.205.80: S 12766555:12766555(0) win 1608 <mss 536> (DF)
Sep 20 02:03:08.826097 rule 35/(match) pass in on em1: 10.10.10.8.60599 > 87.106.115.205.80: S 16188738:16188738(0) win 1608 <mss 536> (DF)
Sep 20 02:03:08.945858 rule 35/(match) pass in on em1: 10.10.10.8.60600 > 87.106.115.205.80: S 7286526:7286526(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.047425 rule 35/(match) pass in on em1: 10.10.10.8.60601 > 87.106.115.205.80: S 8569362:8569362(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.155503 rule 35/(match) pass in on em1: 10.10.10.8.60602 > 87.106.115.205.80: S 4075638:4075638(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.263347 rule 35/(match) pass in on em1: 10.10.10.8.60603 > 87.106.115.205.80: S 14864220:14864220(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.391401 rule 35/(match) pass in on em1: 10.10.10.8.60604 > 148.251.243.132.80: S 1408395:1408395(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.514634 rule 35/(match) pass in on em1: 10.10.10.8.60605 > 148.251.243.132.80: S 1780684:1780684(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.639405 rule 35/(match) pass in on em1: 10.10.10.8.60606 > 87.106.115.205.80: S 5722772:5722772(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.752640 rule 35/(match) pass in on em1: 10.10.10.8.60607 > 87.106.115.205.80: S 12948785:12948785(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.865629 rule 35/(match) pass in on em1: 10.10.10.8.60608 > 87.106.115.205.80: S 13159669:13159669(0) win 1608 <mss 536> (DF)
Sep 20 02:03:09.972998 rule 35/(match) pass in on em1: 10.10.10.8.60609 > 87.106.115.205.80: S 14394517:14394517(0) win 1608 <mss 536> (DF)
Sep 20 02:03:10.071106 rule 35/(match) pass in on em1: 10.10.10.8.60610 > 87.106.115.205.80: S 314701:314701(0) win 1608 <mss 536> (DF)
Sep 20 02:03:10.178173 rule 35/(match) pass in on em1: 10.10.10.8.60611 > 87.106.115.205.80: S 10214196:10214196(0) win 1608 <mss 536> (DF)
Sep 20 02:03:10.291728 rule 35/(match) pass in on em1: 10.10.10.8.60612 > 87.106.115.205.80: S 12923165:12923165(0) win 1608 <mss 536> (DF)
Sep 20 02:03:10.393157 rule 35/(match) pass in on em1: 10.10.10.8.60613 > 87.106.115.205.80: S 15009783:15009783(0) win 1608 <mss 536> (DF)
Sep 20 02:03:11.612687 rule 35/(match) pass in on em1: 10.10.10.8.32978 > 62.109.121.2.53: 20422+[|domain]
Sep 20 02:03:14.661953 rule 35/(match) pass in on em1: 10.10.10.8.5060 > 62.52.19.67.5060: udp 4 [tos 0x88]
Sep 20 02:03:17.397541 rule 35/(match) pass in on em1: 10.10.10.8.60614 > 81.173.115.217.80: S 1499446:1499446(0) win 1608 <mss 536> (DF)
Sep 20 02:03:20.428916 rule 35/(match) pass in on em1: 10.10.10.8.60615 > 81.173.115.217.80: S 101103:101103(0) win 1608 <mss 536> (DF)
Sep 20 02:03:20.910224 rule 35/(match) pass in on em1: 10.10.10.8.123 > 3.64.117.201.123: v4 client strat 0 poll 0 prec 0
Sep 20 02:03:22.291668 rule 37/(match) pass in on pppoe0: 170.106.115.253.40812 > 93.135.15.88.7004: S 611496260:611496260(0) win 65535 <mss 1424,nop,wscale 8,nop,nop,sackOK> (DF)
Sep 20 02:03:30.259088 rule 37/(match) pass in on pppoe0: 212.70.149.34.46552 > 93.135.15.88.65016: S 3710120168:3710120168(0) win 1024

Ich bin mir nicht sicher, inwieweit rule 37 auf interface pppoe0 hier eine Rolle spielt. Rule 35 wird eine Rolle spielen, da unter der IP 10.10.10.8 die Gigaset Go in der dhcpd.conf hardgecoded wurde.


Code:
router# pfctl -vvnf /etc/pf.conf
Loaded 714 passive OS fingerprints
if_wan = "pppoe0"
ip_wan = "169.254.2.2"
if_lo = "lo0"
if_lan = "em1"
if_wifi = "bwfm0"
if_dmz = "em2"
if_internal = "{ em1 bwfm0 }"

dns_nameserver = "1.1.1.1"
ssh_ports = "22"

voip_ports = "{ 5060 5004:5020 }"
voip_base = "10.10.10.8"

table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 224.0.0.0/3 192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 :: ::/96 ::1 ::ffff:0.0.0.0/96 100::/64 2001:10::/28 2001:2::/48 2001:db8::/32 3ffe::/16 fec0::/10 fc00::/7 }

table <bruteforce> persist

set block-policy drop
set loginterface pppoe0
set skip on { lo0 }

@0 match in all scrub (no-df random-id max-mss 1440)
@1 block drop in from no-route to any
@2 block drop in quick on pppoe0 from <martians:0> to any
@3 block drop out quick on pppoe0 from any to <martians:0>
@4 block drop in quick from urpf-failed to any
@5 block drop in log quick proto tcp from <bruteforce:0> to any port = 22
@6 block drop in log quick on pppoe0 proto tcp from any to any port = 22
@7 block drop log all
@8 match out on pppoe0 inet from ! (pppoe0:network:*) to any nat-to (pppoe0:*) round-robin
@9 pass out quick on pppoe0 all flags S/SA
@10 pass inet proto udp from any to 10.10.10.8 port = 5060
@11 pass inet proto udp from any to 10.10.10.8 port 5004:5020
@12 pass proto udp from any to any port = 22
@13 pass proto tcp from any to any port = 22 flags S/SA
@14 pass out log proto tcp from any to any port = 22 flags S/SA
@15 pass out log proto tcp from any to any port = 53 flags S/SA
@16 pass out log proto tcp from any to any port = 80 flags S/SA
@17 pass out log proto tcp from any to any port = 123 flags S/SA
@18 pass out log proto tcp from any to any port = 443 flags S/SA
@19 pass out log proto tcp from any to any port = 853 flags S/SA
@20 pass out log proto tcp from any to any port = 993 flags S/SA
@21 pass out log proto tcp from any to any port 5222:5223 flags S/SA
@22 pass out log proto tcp from any to any port = 5228 flags S/SA
@23 pass out log proto tcp from any to any port = 3389 flags S/SA
@24 pass out log quick inet from 10.10.10.0/24 to any flags S/SA
@25 pass out log quick inet from 192.168.0.0/24 to any flags S/SA
@26 pass out log quick proto tcp from any to any port = 53 flags S/SA
@27 pass out log quick proto tcp from any to any port = 853 flags S/SA
@28 pass out log quick proto udp from any to any port = 53
@29 pass out log quick proto udp from any to any port = 853
@30 pass out quick inet6 from (self:*) to any flags S/SA
@31 pass out quick inet6 from (bwfm0:network:*) to any flags S/SA
@32 pass out quick inet6 from (em0:network:*) to any flags S/SA
@33 pass out quick inet6 from (em1:network:*) to any flags S/SA
@34 pass out quick inet6 from (em2:network:*) to any flags S/SA
@35 pass in log quick on em1 inet all flags S/SA
@36 pass in log quick on bwfm0 inet all flags S/SA
@37 pass in log quick on pppoe0 all flags S/SA
@38 pass in log quick on pppoe0 proto tcp from any to any port = 22 flags S/SA modulate state (source-track rule, max-src-conn-rate 3/60, overload <bruteforce> flush global, src.track 60)
@39 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 22 flags S/SA
@40 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 53 flags S/SA
@41 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 80 flags S/SA
@42 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 443 flags S/SA
@43 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 2015 flags S/SA
@44 pass in log on pppoe0 inet6 proto tcp from any to fe80::20d:b9ff:fe44:ec5c port = 8000 flags S/SA
@45 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 22 flags S/SA
@46 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 53 flags S/SA
@47 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 80 flags S/SA
@48 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 443 flags S/SA
@49 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 2015 flags S/SA
@50 pass in log on pppoe0 inet6 proto tcp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 8000 flags S/SA
@51 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 22
@52 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 53
@53 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 80
@54 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 443
@55 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 2015
@56 pass in log on pppoe0 inet6 proto udp from any to fe80::20d:b9ff:fe44:ec5c port = 8000
@57 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 22
@58 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 53
@59 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 80
@60 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 443
@61 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 2015
@62 pass in log on pppoe0 inet6 proto udp from any to 2a01:c22:c200:3ba7:20d:b9ff:fe44:ec5c port = 8000
@63 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 22 flags S/SA
@64 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 53 flags S/SA
@65 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 80 flags S/SA
@66 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 443 flags S/SA
@67 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 2015 flags S/SA
@68 pass in log on pppoe0 inet proto tcp from any to 93.135.15.88 port = 8000 flags S/SA
@69 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 22
@70 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 53
@71 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 80
@72 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 443
@73 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 2015
@74 pass in log on pppoe0 inet proto udp from any to 93.135.15.88 port = 8000
@75 pass in log quick on pppoe0 inet proto tcp from any to (pppoe0:*) port = 53 flags S/SA
@76 pass in log quick on pppoe0 inet proto udp from any to (pppoe0:*) port = 53
@77 pass in on pppoe0 inet proto udp from any to 93.135.15.88 port = 5060 rdr-to 10.10.10.8
@78 pass in on pppoe0 inet proto udp from any to 93.135.15.88 port 5004:5020 rdr-to 10.10.10.8
@79 pass in log on pppoe0 inet6 proto ipv6-icmp all icmp6-type echoreq
@80 pass in log on pppoe0 inet6 proto ipv6-icmp all icmp6-type routeradv
@81 pass in log on pppoe0 inet6 proto ipv6-icmp all icmp6-type neighbrsol
@82 pass in log on pppoe0 inet6 proto ipv6-icmp all icmp6-type neighbradv
@83 pass in log on pppoe0 inet proto icmp all icmp-type echoreq
@84 pass in log quick inet from 10.10.10.0/24 to any flags S/SA
@85 pass in log quick inet from 192.168.0.0/24 to any flags S/SA


Um die PF Rules verstehen zu koennen, hier der Aufbau meines Netzwerks:

<-----o2-VDSL<---->Speedport Smart 2 Modem-Modus<----->em0 APU2C4 OpenBSD em1<----> Switch <----> 10.10.10.8 Gigaset Box

Hier noch die Gesamtheit meiner pf.conf

Code:
router# cat /etc/pf.conf

### Interfaces
if_wan      = "pppoe0"
#ip_wan      = "169.254.2.2" # em0 static-ip
if_lo       = "lo0"
if_lan      = "em1"
if_wifi     = "bwfm0"
if_dmz      = "em2"
if_internal = "{" $if_lan $if_wifi "}"

### Ports
ssh_ports       = "22"
voip_ports      = "{ 5060 5004:5020 }"
voip_base       = "10.10.10.8"

### Tables
table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 \
                   172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 224.0.0.0/3 \
                   192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 \
                   203.0.113.0/24 \
                   ::/128 ::/96 ::1/128 ::ffff:0:0/96 100::/64 2001:10::/28 \
                   2001:2::/48 2001:db8::/32 3ffe::/16 fec0::/10 fc00::/7 }

table <bruteforce> persist

### Security Rules
set block-policy drop
set loginterface $if_wan
set skip on $if_lo

match in all scrub (no-df random-id max-mss 1440)
 
block in from no-route
block in quick from urpf-failed

block drop in quick on $if_wan from <martians> to any
block drop out quick on $if_wan from any to <martians>

block in log quick proto tcp from <bruteforce> to any port $ssh_ports
block in log quick on $if_wan proto tcp to port $ssh_ports

##### Outgoing - Egress Rules

### $if_wan - pppoe0
block log all
match out on $if_wan inet from !($if_wan:network) to any nat-to ($if_wan)
pass out quick on $if_wan
pass proto tcp to any port $ssh_ports keep state
pass proto udp to any port $ssh_ports keep state
#match proto udp to port $voip_ports
pass proto udp to $voip_base port $voip_ports

# TCP
pass out log proto tcp to port { 22 53 80 123 443 853 993 5222:5223 5228 3389 }

# UDP
pass out log quick proto { tcp udp } to any port { 53 853 }

# ICMP

# [$if_lan <-> $if_wifi]
pass out quick log from { $if_lan:network $if_wifi:network } to any
pass out quick log from $if_lan:network to $if_wifi:network


### Interfaces
pass out quick inet6 from { (self) (bwfm0:network) }
pass out quick inet6 from { (self) (em0:network) }
pass out quick inet6 from { (self) (em1:network) }
pass out quick inet6 from { (self) (em2:network) }

### $if_lan - em1 / $if_wifi - bwfm0 = $if_internal
#pass proto tcp from $if_internal to port $tcp_services
#pass quick log proto { tcp udp } to port $udp_services

### $if_dmz - em2


##### Incoming - Outbound Rules
pass in quick log on { $if_lan $if_wifi } inet
pass in quick log on $if_wan
#pass in quick log on $if_wan to any port $monitor_ports
pass in quick log on $if_wan proto tcp to port { 22 80 443 2015 8000 }

### $if_wan - pppoe0
pass in quick log on $if_wan proto tcp to any port $ssh_ports modulate state \
    (source-track rule, max-src-conn-rate 3/60, overload <bruteforce> flush global)

# TCP
pass in log on $if_wan proto { tcp udp } from any to $if_wan port { 22 53 80 443 2015 8000 }
pass in quick log on $if_wan inet proto { tcp udp } from any to ($if_wan) port 53

# UDP
#match in on $if_wan proto udp to $if_wan port $voip_ports rdr-to $voip_base
pass in on $if_wan proto udp from any to $if_wan port $voip_ports rdr-to $voip_base

# ICMP
pass in log on $if_wan inet proto icmp all icmp-type { echoreq }
pass in log on $if_wan inet6 proto icmp6 all icmp6-type { echoreq routeradv neighbrsol neighbradv }

# [$if_lan <-> $if_wifi]
pass in quick log from { $if_lan:network $if_wifi:network } to any
pass in quick log from $if_lan:network to $if_wifi:network


Hilfe wird dankend angenommen. Ich bin etwas unschluessig, an welchen Stellschrauben ich weiter drehen soll. Und meine Mutter sitzt mir im Nacken, weil sie ihr Haustelefon wieder haben will.


Cheers


#Edit: Telefonnummer anonymisiert
 

Anhänge

  • sngrep_anon.txt
    1,9 KB · Aufrufe: 134
Zuletzt bearbeitet von einem Moderator:
Ich habe leider meine alte pf.conf nicht mehr, aber bei mir kam der Durchbruch Als ich feststellte, dass man für SiP die gleichen Ports verwenden muss, die der Client verwendet. Wenn ich mich richtig erinnere, dann steht die Portnummer nämlich auch im Netzpaket.
 
401 - Unauthorized und 403 - Forbidden deuten auf einen Fehler hinsichtlich Zugangsdaten, Passwort bzw. Typo meinerseits oder Angabe in falschem Inputfeld in der GUI hin.
Oder o2 weist alles an voip ab, wenn die o2-box nicht die Einwahl macht. Gehen denn die Zugangsdaten grundsätzlich?
Bei sipgate.de kannst du einen kostenlosen Probemonat zum Vergleich nehmen, das ist komplett geräteunabhängig und damit könntest du schauen, ob die logs was anderes anzeigen. Auch: du brauchst keine offenen ports von außen, sondern nur nach außen. Vermutlich ist die 93.135.15.88 auch nicht statisch, die ganzen Regeln 5060, 5004, 5020 können somit als Stolperfalle raus.

Der Frage nach Vertauschen der Inputs gehe ich durch Lesen im o2 Forum nach. Es scheint einige zu geben, welche die Unterschiedlichkeit von o2 sowie Gigaset Naming verwirrt.
Voip ohne die mitgelieferte Providerbox verhält sich nicht selten merkwürdig. Eine gute Anlaufstelle zur Recherche wäre auch https://www.ip-phone-forum.de/
Die Spezis dort kennen die einzelnen Kniffe zu den Providern am besten. Das fängt schon an mit welchem DNS-Server man den registrar sip.alice-voip.de auflösen kann. Ich frage direkt die root-server ab und komme z.B. nicht auf 62.52.19.67 raus.

Tipp zur privacy: ich würde die Rufnummer nicht öffentlich posten, lieber mit 49123456789 anonymisieren. Sonst ruft in Zukunft ein bot oder sonstiger Schelm an und will Waschmaschinen verkaufen oder so. Wenn du den post selbst nicht mehr editieren kannst, sag bei einem Teammod Bescheid, der kickt das dann fix raus.
Ansonsten herzlich willkommen bei uns. :)
 

Vielleicht magst du mal mit Asterisk rumexperimentieren. Das habe ich damals gemacht, weil mir einuge Einstellungen nicht klar waren.
und es war einfacher due am PC zu testen als ueber die fummelige Weboberflaeche von den Telefonen.


Auf jeden Fall habe ich in meiner pf.conf folgenden Eintrag!
pass in quick on $ext_if proto { tcp, udp} from $ext_if to any port 5060 keep state
 
Oder o2 weist alles an voip ab, wenn die o2-box nicht die Einwahl macht. Gehen denn die Zugangsdaten grundsätzlich?
Bei sipgate.de kannst du einen kostenlosen Probemonat zum Vergleich nehmen, das ist komplett geräteunabhängig und damit könntest du schauen, ob die logs was anderes anzeigen. Auch: du brauchst keine offenen ports von außen, sondern nur nach außen. Vermutlich ist die 93.135.15.88 auch nicht statisch, die ganzen Regeln 5060, 5004, 5020 können somit als Stolperfalle raus.

Ich bin mir nicht sicher. Zum einen gibt es die Möglichkeit "static-port" zu definieren, welches dann die URL des em0 interfaces des APU Boards Richtung Speedport Modem ist? Zum anderen kann mit "keep-state" die Pakete statisch an ein interface binden. Bislang habe ich mit dieser Art Konfiguration noch keine Erfahrungen gemacht.

Voip ohne die mitgelieferte Providerbox verhält sich nicht selten merkwürdig. Eine gute Anlaufstelle zur Recherche wäre auch https://www.ip-phone-forum.de/
Die Spezis dort kennen die einzelnen Kniffe zu den Providern am besten. Das fängt schon an mit welchem DNS-Server man den registrar sip.alice-voip.de auflösen kann. Ich frage direkt die root-server ab und komme z.B. nicht auf 62.52.19.67 raus.

Das muss sich doch irgendwie machen lassen. Ich werde dort mal die Frage nach der richtigen Konfiguration stellen.

Tipp zur privacy: ich würde die Rufnummer nicht öffentlich posten, lieber mit 49123456789 anonymisieren. Sonst ruft in Zukunft ein bot oder sonstiger Schelm an und will Waschmaschinen verkaufen oder so. Wenn du den post selbst nicht mehr editieren kannst, sag bei einem Teammod Bescheid, der kickt das dann fix raus.
Ansonsten herzlich willkommen bei uns. :)

Das ist mir entgangen @mod bitte einmal anonymisieren. Danke
 

Vielleicht magst du mal mit Asterisk rumexperimentieren. Das habe ich damals gemacht, weil mir einuge Einstellungen nicht klar waren.
und es war einfacher due am PC zu testen als ueber die fummelige Weboberflaeche von den Telefonen.


Auf jeden Fall habe ich in meiner pf.conf folgenden Eintrag!
pass in quick on $ext_if proto { tcp, udp} from $ext_if to any port 5060 keep state

Eine Adaption an deine PF Rule hat leider keinen Unterschied gemacht. Ein Herumspielen mit Asterisk will ich mir gerade aus Zeitgründen verkneifen. Ich habe das Thema mal im IP Forum breitgetreten. Vllt hat dort jemand eine Idee, wie mit der Gigaset Box umzugehen ist.

Link: https://www.ip-phone-forum.de/threads/o2-myhome-m-gigaset-go-box-100.313830/

Weitere Lösungen hinsichtlich PF Konfiguration sind herzlich willkommen.
 
Der dort gezeigte Link sieht schon mal gut aus, das würde ich 1:1 übernehmen und dann erneut die logs prüfen.
 
Der dort gezeigte Link sieht schon mal gut aus, das würde ich 1:1 übernehmen und dann erneut die logs prüfen.

Genau das habe ich gemacht. Genau das hat auch funktioniert in Zusammenarbeit mit Dettus keep-state rule.

Code:
pass in quick log on $if_wan proto { tcp udp } from $if_wan to any port $voip_ports keep state

Danke hier für den Support!
 
Vielleicht magst du mal mit Asterisk rumexperimentieren.
Für sehr einfache Anwendungen mit rein interner Sprachtelefonie mit VoIP (SIP + RTP) eignet sich Kamailio besser als Asterisk. Seit einigen Monaten setze ich erfolgreich Kamailio auf einem Raspberry Pi 4 und Ubuntu 20.04 LTS mit VoIP-fähigen Gigaset-Schnurlostelefonen für die kostenlose, interne Sprachtelefonie ein.

Ausführliche Anleitung zu Kamailio findet man unter:

Für die Fehlersuche in der VoIP-Telefonie genügt Wireshark.

Wireshark besitzt mächtige Funktionen für die Auswertung der Signalisierung per SIP und die einfachen Audiocodecs können einfach "abgehört" werden.

Ich verwende Wireshark aus Sicherheitsgründen nur in Kombination mit dumpcap:

Beim Einsatz von VoIP-fähigen Gigaset-Schnurlostelefonen ist zu beachten, dass die zu verwendenden SIP-Ports (Signalisierung) und RTP-Ports (Sprachdaten) im Webinterface des Gigaset-Schnurlostelefons konfiguriert werden können. Die wichtigsten Konfigurationsschritte im Webinterface des VoIP-fähigen Gigaset-Schnurlostelefons sind im zweiten Link aufgelistet. Diese VoIP-Telefon-Konfiguration muss natürlich mit der Firewallkonfiguration übereinstimmen. Und ja, die NAT-Traversal muss natürlich korrekt konfiguriert sein, ansonsten funktionieren plötzlich ankommende Sprachanrufe nicht mehr!

Ich bin der (ungetesteten) Meinung, dass für externe VoIP-Telefonie über IPv4 das VoIP-Telefon so konfiguriert werden muss, dass der Outbound-Proxy verwendet wird => GigaSet-Webinterface-Einstellung: Outbound-Proxymodus

Meine Kritikpunkte am Gigaset E630A GO (mit Gigaset GO-Box 100) findet man auf der Webseite:
ganz unten.

Im sngrep_anon-txt ist ersichtlich, dass die Registrierung beim "SIP-Registrar" nicht erfolgreich war.

Die fehlende erfolgreiche Registrierung beim SIP-Registrar wird im Webinterface des VoIP-Telefons ausgewiesen. Und wird auch auf dem Display des VoIP-Telefons gemeldet => GigaSet-Webinterface-Einstellung: VoIP-Status am Mobilteil anzeigen:=Ja
 
Zuletzt bearbeitet:
Statt Asterisk benutze ich mittlerweile LINPHONE zum Testen.

Ich habe es ausserdem mit einem Gigaset Geraet geschafft:

 
Hi

SIP und Nat ist eine sehr problematische Kombi da SIP einen eigenen Header hat in dem die source IP drin steht diese headerdaten
Werden auch vom SIP Provider verwenden.

Wenn nun die source Nat IP nicht gleich SIP
Source IP ist kann das schon zum 403 führen,

Von daher ist ein Einsatz eine SIProxy sinnvoll.
Beim läuft eine alte 7490 als WLAN und DECT
Station hinter einer OpenBSD Firewalll, aus der der Proxy läuft ( inbound If ist das Fritzbox If, outbound das DSL pppoe0 If)

In der Fritzbox ist SIP in Verwendung eines
Proxy eingerichtet.

Fg

Holger
 
Für sehr einfache Anwendungen mit rein interner Sprachtelefonie mit VoIP (SIP + RTP) eignet sich Kamailio besser als Asterisk. Seit einigen Monaten setze ich erfolgreich Kamailio auf einem Raspberry Pi 4 und Ubuntu 20.04 LTS mit VoIP-fähigen Gigaset-Schnurlostelefonen für die kostenlose, interne Sprachtelefonie ein.

Ausführliche Anleitung zu Kamailio findet man unter:

Für die Fehlersuche in der VoIP-Telefonie genügt Wireshark.

Wireshark besitzt mächtige Funktionen für die Auswertung der Signalisierung per SIP und die einfachen Audiocodecs können einfach "abgehört" werden.

Ich verwende Wireshark aus Sicherheitsgründen nur in Kombination mit dumpcap:

Beim Einsatz von VoIP-fähigen Gigaset-Schnurlostelefonen ist zu beachten, dass die zu verwendenden SIP-Ports (Signalisierung) und RTP-Ports (Sprachdaten) im Webinterface des Gigaset-Schnurlostelefons konfiguriert werden können. Die wichtigsten Konfigurationsschritte im Webinterface des VoIP-fähigen Gigaset-Schnurlostelefons sind im zweiten Link aufgelistet. Diese VoIP-Telefon-Konfiguration muss natürlich mit der Firewallkonfiguration übereinstimmen. Und ja, die NAT-Traversal muss natürlich korrekt konfiguriert sein, ansonsten funktionieren plötzlich ankommende Sprachanrufe nicht mehr!

Ich bin der (ungetesteten) Meinung, dass für externe VoIP-Telefonie über IPv4 das VoIP-Telefon so konfiguriert werden muss, dass der Outbound-Proxy verwendet wird => GigaSet-Webinterface-Einstellung: Outbound-Proxymodus

Meine Kritikpunkte am Gigaset E630A GO (mit Gigaset GO-Box 100) findet man auf der Webseite:
ganz unten.

Im sngrep_anon-txt ist ersichtlich, dass die Registrierung beim "SIP-Registrar" nicht erfolgreich war.

Die fehlende erfolgreiche Registrierung beim SIP-Registrar wird im Webinterface des VoIP-Telefons ausgewiesen. Und wird auch auf dem Display des VoIP-Telefons gemeldet => GigaSet-Webinterface-Einstellung: VoIP-Status am Mobilteil anzeigen:=Ja

Ich habe dein Kommentar auf Digitec gelesen und kann das absolut nicht nachvollziehen.

Habe eine Menge Gigaset Geräte unter anderem auch das E630 in Verbindung mit Asterisk hinter einer OPNsense Firewall mit externen Nummern in Betrieb und die funktionieren wirklich gut. Von Rauschen kann ich hier wirklich nicht sprechen. Ich gehe stark davon aus, dass etwas mit deiner Konfiguration nicht stimmt.

Betreue einige Firmen mit der selben Hardware und habe eigentlich nie wirklich grosse Probleme. Was etwas anschpruchsvoll ist, ist die Konfiguration der Firewall wenn es um SIP geht.

SRTP macht nur bedingt Sinn, da externe Anbieter sowieso nicht verschlüsseln und im Fall der Fälle deine Gespräche offen legen müssen.
Bei standortübergreifenden Gesprächen ist die Sache sehr einfach...

  • auf jedem Standort eine Asterisk Anlage verbunden mit IAX und AES128 verschlüsselt
  • SIP Geräte im eigenen VLAN bis zur Asterisk
  • im Paranoia Fall den IAX Kanal über Wireguard
oder sofern es dein Gerät unterstützt
  • Kamailio Server
  • ZRTP Telefon (gibts eher selten)

Ich möchte nicht Werbung für Gigaset machen, aber von der Gesprächsquallität sind sie wirklich gut.
 
Ich nutze eine Kombination G722 und OPUS je nachdem was die Geräte/Trunks so können. Die edle Sprachqualität und mögliche Rauschunerdrückung ist es mir wert, auch wenn man das mit Umkodieren erkaufen muss.
 
Oder o2 weist alles an voip ab, wenn die o2-box nicht die Einwahl macht. Gehen denn die Zugangsdaten grundsätzlich?
Bei sipgate.de kannst du einen kostenlosen Probemonat zum Vergleich nehmen, das ist komplett geräteunabhängig und damit könntest du schauen, ob die logs was anderes anzeigen. Auch: du brauchst keine offenen ports von außen, sondern nur nach außen. Vermutlich ist die 93.135.15.88 auch nicht statisch, die ganzen Regeln 5060, 5004, 5020 können somit als Stolperfalle raus.
Ich gebe mal meinen Senf dazu, da ich ein ähnliches Setup habe mit O2, einer GoBox 100 und einer OPNsense, vor dieser.

@mr44er Die eingehenden Ports am WAN für RTP, wie in diese, Fall 5004 - 5020, sind nötig. Die müssen übrigens mit dem Portbereich aus der GoBox übereinstimmen, weil die GoBox signalisiert dem O2 VoIP Server über SIP, über welchen Port der Audiostream der Gegenstelle an die GoBox gesendet werden soll. Da dies dynamisch passiert, muss man den Portbereich freigeben. Man kann ihn aber zusätzlich auf den IP-Bereich der O2-Server einschränken. Diese Beschränkung habe ich bei O2 noch nicht drin, sondern im Moment nur für sipgate und easybell aktiv.

@mark05 Man braucht nicht unbedingt einen Proxy. Ich hatte auch damit auf meiner OPNsense rumgespielt, es ewig nicht zum Laufen bekommen und bin wieder mit dem jetzigen Setup am Start.

An den TO:
In der GoBox werden die Zugangsdaten hinterlegt, klar. Bei O2 gibt es die Spezialität, dass der Hostname des SIP Registrars, nur aus dem O2 Netz von deren DNS Server aufgelöst wird. Andere DNS Server, weil man lieber Google für mehr Speed, oder Quad9 für mehr privacy nutzt, kennen die Namen nicht. Da muss man ggf. einen Eintrag in seinem lokalen DNS einrichten.

Das mit dem 403 forbidden und der GoBox kann ich mir nicht erklären, wenn die Zugangsdaten stimmen. Meine Beobachtung war, dass es mit der GoBox geht und mit einem Softphone nicht ging, obwohl ich die Zugangsdaten in beiden Fällen aus meiner Passwortverwaltung kopiert habe.

Ich würde das Problem mit dem Zugang zuerst lösen. Wenn SIP geht, klingelt zumindest das Telefon. Danach kann man sich an RTP machen.
 
Ich habe eine Go Box 100 hinter meinem FreeBSD-Router an einem Sipgate VoIP-Dingens. Da ich die Box nicht direkt am Netz haben möchte, habe ich einen siproxd dazwischen geschaltet. Das löst auch gleich die Probleme, dass die Go Box kein IPv6 spricht und für IPv4 das NAT penetriert werden muss: Auf dem PPPoE-Endpunkt lasse ich in der pf.conf 4 Ports für RTP an den siproxd durch und leite per Redirect die gleichen vier Ports für IPv4 weiter. Vir Ports sind zwei Sprachkanäle, da ich nur einen Sprachkanal brauche, reicht das. Die siproxd-Konfiguration ist simpel, die öffentliche IP zieht er ich von einem Hostnamen, den ich per PPPoE-Reconnect per ddclient update. In Go Box ist der siproxd als Outbound Proxy eingetragen.

Ich schreibe zwar DSCP-Werte für QoS-Gedöns in die Pakete, beachte sie in meinem Netz allerdings nicht. Wobei es zugegeben auch schwer ist, den Gigabit-Anschluss soweit auszureizen, dass für die paar Kbit/s eines VoIP-Gesprächs keine Luft mehr bleibt. Vielleicht hilft es aber außerhalb auf ISP-Seite.

Das Setup funktioniert einwandfrei. Absolut zuverlässig eingehend und ausgehend, saubere Sprachqualität ohne Rauschen, Echos und Klicks.Wenn Interesse besteht, kann ich die Tage mal die Configs zusammenkopieren.
 
Ich beschreibe das mal recht umfassend und von Anfang an: VoIP nutzt SIP für das Session Handling und RTP für die Sprachkanäle. SIP nutzt meist Port 5060 TCP oder UDP für unverschlüsselte und Port 5061 TCP oder UDP für per verschlüsselte Kommunikation. SIP ist vollständig proxyfähig, tatsächlich nutzen VoIP-Provider intern und untereinander exzessiv SIP-Proxies. Für die Sprachkanäle wird RTP genutzt, ein VoIP-Gespräch benötigt einen eingehenden und ausgehenden RTP-Kanal. Jeder RTP-Kanal benötigt einen beliebigen UDP-Port, der zuvor per SIP ausgehandelt wurde. RTP kann verschlüsselt werden, wie oben schon besprochen wurde, ist das allerdings nicht wirklich notwendig. Das Problem mit RTP ist, dass UDP in Sachen NAT immer problematisch ist. Daher die notwendigen Portweiterleitungen. Man sollte immer einen Sprachkanal (also zwei RTP-Ports) mehr anbieten, als man benötigt. Falls ein Gespräch abreißt und eine der beiden Gegenseiten es noch nicht kapiert hat, kann man ohne zusätzlichen Gesrächskanal nicht sofort zurückrufen.

siproxd ist ein einfacher Proxy, der zwischen den Client (bei mir die Gigaset Go Box 100) und den Server (bei mir Sipgate) geschaltet wird. Es proxied SIP vollständig, der Weg ist dann Server <-> siproxd <-> Client. RTP wird per Relaying einfach weitergeleitet. Client und Server sprechen niemals direkt miteinander. Der Vorteil dadurch ist, dass siproxd eine einerseits sehr "lockere" SIP-Implementierung hat, andererseits sehr streng sein kann. Das gleicht Probleme im Zusammenspiel meist bröseliger Firmware von VoIP-Telefonen und schlechten Serverimplementierungen aus. Außerdem kann siproxd NATs ohne STUN penetrieren und es ermöglicht IPv6-Kommunikation - was man gerade, wenn der ISP EIn Carrierer Grade NAT macht, möchte - wenn der Client es nicht unterstützt.

siproxd erlaubt zwei Betriebsmodi. Der eine wird in der Doku als "on the NAT" bezeichnet, da läuft siproxd auf dem Host, der auch das NAT macht. In diesem Fall braucht man keine Portweiterleitungen, da siproxd am NAT vorbei direkt mit der Außenwelt kommunizieren kann. Der andere Modus ist "in front of the NAT", auf Deutsch würde man eher "hinter dem NAT" sagen. In diesem Fall läuft siproxd auf einem eigenen Host im internen Netz hinter dem NAT. Es braucht Portweiterleitungen und einen Weg die externe, vom NAT verdeckte IPv4-Adresse an siporxd zu kommunizieren. Ich mache diesen letzten Modus mit einem eigenen Host.

Der siproxd-Host ist 10.10.0.8, außerdem hat er eine IPv6-Adresse aus dem dynamischen, vom ISP zugewiesenen Prefix. Die RTP-Ports sind 7070 bis 7073, also 4 Ports für 2 Sprachkanäle. Ich habe bei Sipgate einen Sprachkanal gebucht. Für IPv4 sind diese 4 Port an die 10.10.0.8 weitergeleitet:

Code:
rdr on $NIC_EXT proto udp from any to ($NIC_EXT) port 7070:7073 tag $TAG_RDR_RTP -> 10.10.0.8 port 7070:7073
pass in on $NIC_EXT inet proto udp from any to 10.10.0.8 port 7070:7073 tagged $TAG_RDR_RTP

Für IPv6 werden sie einfach durchgelassen. Außerdem schreibe ich beim PPPoE-Reconnect die neue externe IPv4-Adresse per ddclient in einen DynDNS-Eintrag revproxy.emr.yamagi.org. Den nutze ich um die externe IPv4-Adresse an siproxd zu kommunisieren. Die Go Box 100 ist die 10.10.0.50. Aus Paranoia schränke ich siproxd so ein, dass nur diese IP auf ihn verbinden kann. Wirklich notwenig ist das nicht, aber gibt vielleicht mit ein paar Firewall-Regeln ein besseres Gefühl, dass nicht irgendwer per SIP nach außen Verbinungen aufbauen kann.

Die siproxd-Config ist wirklich einfach, ich habe mich da am Beispiel langgehangelt:

Code:
# NICs - Da wir hinter dem Proxy sind, beide gleich.
if_inbound  = e.sip.sip.b
if_outbound = e.sip.sip.b

# Port, auf dem wir auf lauschen.
sip_listen_port = 5060

# Hostname, von dem wir die externe IP lesen.
host_outbound = revproxy.emr.yamagi.org

# Nur und ausschließlich der DECT-Basisstation erlauben
# sich zu registrieren.
hosts_allow_reg = 10.10.0.50/32

# Wir sollen ein Dämon werden.
daemonize = 1

# Logelevel - 1 ist INFO, WARN und ERROR.
silence_log = 1

# Nutzer, unter dem wir laufen.
user = nobody

# Datenbank, in der wir Registrations über Neustarts hinweg speichern.
# So kann der Daemon neugestartet werden, ohne das die Telefone die
# Registrierung verlieren.
registration_file = /var/db/siproxd/siproxd_registrations

# Und damit das auch bei Crashs klappt, speichern wir die Registrations
# alle 300 Sekunden == 5 Minuten in der Datei.
autosave_registrations = 300

# Die PID-File, wird für das rc-Script benötigt.
pid_file = /var/run/siproxd/siproxd.pid

# Wir sind ein RTP-Proxy. Nur so kommen RTP-Gesprächskanäle durch
# unsere diversen Firewalls und die große NAT-Instanz.
rtp_proxy_enable = 1

# Die RTP-Ports. Zwei Ports pro Gesprächskanal, da wir nur einen
# Kanal unterstützen, reichen uns vier Ports. Da sind schon zwei
# Ports zur Reserve drin. Müssen von außen an und weitergeleitet
# werden.
rtp_port_low  = 7070
rtp_port_high = 7073

# RTP-Timeout. 300 Sekunden == 5 Minuten sind der Standardwert.
rtp_timeout = 300

# QoS Level, welcher in die Pakethearder geschrieben wird. Wir
# werten ihn intern nicht aus, aber vielleicht hilft es in der
# Außenwelt.
rtp_dscp = 46
sip_dscp = 0

# TCP Timeouts, vor allem für TCP SIP Verbindungen.
tcp_timeout = 600
tcp_connect_timeout = 500

# Kee Alive Intervall in Sekunden. Hält die Firewall offen.
tcp_keepalive = 60

# Kein Debugging.
debug_level = 0x00000000
debug_port = 0

Nicht über die NIC-Namen wundern, das virtuelle NICs des vnet-Jails mit sprechenden Namen. Da siproxd als Proxy hinter dem NAT läuft, sind das eingehende Interface (zum Client) und das ausgehende Interface (zum NAT) gleich. Der Proxy wird auf der Go Box 100 als Outbound Proxy eingetragen:

siproxd.png


Das sollte reichen. Wenn es nicht funktioniert, wird man sich ärgern, dass die Go Box 100 so mal absolut gar keine Fehlermeldungen gibt. In dem Fall hilft es siproxd im Vordergrund zu starten. Dazu in der Config daemonize = 0 setzen und anschließend per siproxd -d -1 starten, er gibt dann die komplette SIP-Kommunikation einschließlich aller Fehlermeldungen auf die Konsole aus. Das hilft meist den Fehler zu finden.

Nachdem das Telefon erfolgreich registriert hat, sollte man noch mindestens 5 Minuten mit Anruftests warten. Ich weiß es nicht genau, aber ich vermute, dass Sipgate da einfach etwas träge ist. Wartet man nicht lange genug, kommen ausgehend keine Sprachkanäle zustande oder Anrufer hören ein Freizeichen, aber es klingelt nicht. Nach Neustarts bei gleichen externen IP-Adressen passiert das dank gespeicherter Registrierungen nicht, zumindest solange der Ausfall nicht zu lange ist. Eine Änderung der externen IPv4- oder IPv6-Adresse braucht wieder ~5 Minuten sich zu koordinieren.
 
Zurück
Oben