.titleBar { margin-bottom: 5px!important; }

SER und RTPPROXY als Vermittler zwischen IPv4 und IPv6

Dieses Thema im Forum "SER-Allgemein" wurde erstellt von amarikar, 25 Jan. 2005.

  1. amarikar

    amarikar Neuer User

    Registriert seit:
    28 Dez. 2004
    Beiträge:
    16
    Zustimmungen:
    0
    Punkte für Erfolge:
    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