SER und RTPPROXY als Vermittler zwischen IPv4 und IPv6

amarikar

Neuer User
Mitglied seit
28 Dez 2004
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Hallo an Alle,

ich nutze den SER 0.8.14 zusammen mit dem aktuellen RTPPROXY aus dem CVS unter Debian.
Ich möchte gerne den Proxy zwischen IPv4 und IPv6 vermitteln lassen, doch leider bekomme ich die Konfiguration des HowTos nicht ans laufen.

Ich nutze 2x Kphone 3.11 IPv6 und 2x Cisco 7960. Der Proxy wird noch nicht einmal für ein Gespräch innerhalb der gleichen IP-Version genutz.

Der Proxy wird mit rtpproxy -l /139.6.16.83 -6 3000:0:0:12::30 gestartet (Ich nutze Pseudo-Unicast-Adressen in einem abgeschlossenen Netz).

Die ser.cfg sieht so aus:

Code:
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#

# ----------- global configuration parameters ------------------------

#debug=3         # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no        # (cmd line: -E)

/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/

check_via=no    # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
port=5060
children=2
fifo="/tmp/ser_fifo"

listen=139.6.16.83
listen=3000:0:0:12::30

# ------------------ module loading ----------------------------------

# Uncomment this if you want to use SQL database
loadmodule "/usr/lib/ser/modules/mysql.so"

loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_db.so"

# NAT-Traversal usw
loadmodule "/usr/lib/ser/modules/nathelper.so"

# ----------------- setting module-specific parameters ---------------

# -- usrloc params --

#modparam("usrloc", "db_mode",   0)

# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)

# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")

# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

# -------- Parameter des Nathelper - Moduls --------

modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")

# -------------------------  request routing logic -------------------

# me, myself & I:
alias="139.6.16.83"
alias="3000:0:0:12::30"
alias="ipv6sipserv.nt.fh-koeln.de"
alias="ipv6sipserv.ipv6.fh-koeln.de"
alias="ipv6sipserver.ipv6.fh-koeln.de"
alias="sipserver.ipv6.fh-koeln.de"
alias="sipserver"
alias="ipv6sipserv"

# main routing logic

route {
        # initial sanity checks -- messages with
        # max_forwars == 0, or excessively long requests,
        # or those that don't addressed to us
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                break;
        };
        if (msg:len > max_len) {
                sl_send_reply("513", "Message too big");
                break;
        };

        # route invitation request to other domains
        if (!(uri == myself) && method == "INVITE") {
                record_route();
                if (!t_relay())
                        sl_reply_error();
                break;
        };
        if (method == "REGISTER") {
                if (af == inet) {
                        save("location_inet4");
                } else if (af == inet6) {
                        save("location_inet6");
                } else {
                        sl_send_reply("403", "Anmeldung fehlgeschlagen!");
                };
                break;
        };

        if (method == "INVITE") {
                ################################
                ### CASE: Anrufer nutzt IPv4 ###
                ################################
                if (lookup("location_inet4")) {

                # Comment out three lines below if you want
                # RTP for IPv4->IPv4 calls to go directly
                # between UAs

                ######
                ### CASE: Beide nutzen IPv4
                ######
                if (af == inet)
                        if (force_rtp_proxy("FAII"))
                        #if (force_rtp_proxy())
                                t_on_reply("1");

                # proxy session from a Internal IPv4
                # phone to a External IPv6 address

                ######
                ### CASE: Anrufer nutzt IPv4, Anzurufender IPv6
                ######
                if (af == inet6)
                        if (force_rtp_proxy("FAIE"))
                                t_on_reply("1");
                }

                ################################
                ### CASE: Anrufer nutzt IPv6 ###
                ################################
                else if (lookup("location_inet6")) {

                # proxy session from a External IPv6
                # phone to a Internal IPv4 address

                ######
                ### CASE: Anrufer nutzt IPv6, Anzurufender IPv4
                ######
                if (af == inet)
                        if (force_rtp_proxy("FAEI"))
                                t_on_reply("1");

                # Comment out three lines below if you want
                # RTP for IPv6->IPv6 calls to go directly
                # between UAs

                ######
                ### CASE: Beide nutzen IPv6
                ######
                if (af == inet6)
                        if (force_rtp_proxy("FAEE"))
                                t_on_reply("1");
                }

                else {
                        sl_send_reply("403", "User nicht erreichbar oder unbekannt!");
                        break;
                };
        };

        if (method == "BYE" || method == "CANCEL")
                unforce_rtp_proxy();

        # Do strict routing if pre-loaded route headers present
        if (loose_route()) {
        t_relay();
        break;
        };

        if (method == "INVITE")
        record_route();

        if (!t_relay())
        sl_reply_error();
}

onreply_route[1] {
        if (!(status=~"183" || status=~"200"))
                break;
        force_rtp_proxy("FA");
}

Wenn jemand mal ein ähnliches Netz aufgebaut hat, würde ich mich sehr über die Konfiguration (und Startskripte) für den SER und den RTPPROXY freuen.

Danke, Achim
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.