ich habe ein sehr verzwicktes Problem, bei dem ich absolut kein Land sehe. Es geht darum, dass in meinem Netz das normale/alte chan_sip funktioniert, aber das neuere PJSIP nicht. Ich kann die Schuld aber auch nicht an Asterisk/Digium/PJSIP abtreten, weil das Problem auf der Firewall auftritt.
Folgendes Setup auf der Firewall (HP DL380g4):
eth0: Hängt am Telekom Gateway mit öffentlichem Subnet 1.2.3.0/24 (GW IP: 1.2.3.5)
eth2: Servernetz (1.2.3.0/24)
eth3: Büronetz (192.168.0.0/24)
br0: Bridge zwischen eth0 und eth2
SNAT 192.168.0.0/24 auf 1.2.3.6
Asterisk Server: 1.2.3.110 an eth2 (Port 5060 für PJSIP und Port 5061 für chan_sip)
Das Telefon (192.168.0.168) kann sich sowohl mit PJSIP als auch mit chan_sip registrieren, es wird im Asterisk auch die korrekte IP und Port registriert. Ferner ist ein Softphone (Handy von außen ohne NAT) am VoIP Server registriert.
Wenn das Telefon per chan_sip registriert ist, kommen das SIP/INVITE Paket am Telefon an, per pjsip nicht.
Ich habe den Weg des Invite Pakets nun mit tcpdump untersucht und folgendes festgestellt:
- eth2: Das Paket kommt in beiden Fällen korrekt vom SIP Server an der Firewall an mit der NAT-IP als Ziel (1.2.3.6) und dem korrekten Src und Dest Port
- br0: Das SNAT wird korrekt nachgeschlagen und in beiden Fällen zu der IP 192.168.0.168 aufgelöst und erscheint auf der Bridge mit DestIP 192.168.0.168
- eth3: Hier kommt das Paket nur bei chan_sip an.
Es gibt keine unterschiedlichen Firewallregeln für 5060 und 5061, es wird nicht gefiltert.
Conntrack sieht mir auch richtig aus:
Code: Alles auswählen
root@sfw1:~# grep 3072 /proc/net/ip_conntrack
udp 17 143 src=192.168.0.168 dst=1.2.3.110 sport=3072 dport=5061 src=1.2.3.110 dst=1.2.3.6 sport=5061 dport=3072 [ASSURED] mark=0 use=2
udp 17 3584 src=192.168.0.168 dst=1.2.3.110 sport=3072 dport=5060 src=1.2.3.110 dst=1.2.3.6 sport=5060 dport=3072 [ASSURED] mark=0 use=2
Viele Grüße
Martin
PS: Ich habe das gleiche Phänomen sowohl bei Snom/Grandstream und Softphone
Edit: Hier relevante iptables Ausschnitte
Code: Alles auswählen
root@sfw1:~# iptables -t nat -nL | grep -E '506[0-9]'
root@sfw1:~# iptables -t mangle -nL | grep -E '506[0-9]'
root@sfw1:~# iptables -nL | grep -E '506[0-9]'
LOG udp -- 0.0.0.0/0 1.2.3.110 udp dpts:5060:5061 LOG flags 0 level 6 prefix "fwbuilder: voip: "
LOG udp -- 1.2.3.110 0.0.0.0/0 udp dpts:5060:5061 LOG flags 0 level 6 prefix "fwbuilder: voip: "
ACCEPT udp -- 0.0.0.0/0 1.2.3.110 udp dpts:5060:5061 state NEW
Ändere ich den PJSIP Port auf 5061 oder 5000, wird das Gespräch aufgebaut.
Ändere ich den chan_sip Port auf 5060, wird das Gespräch ebenfalls aufgebaut.