You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

WORK IN PROGRESS

Introduction 

MAP-T (RFC 7599) is a stateless IPv4/IPv6 transition mechanism that enables IPv4 services over an IPv6-only network using algorithmic translation.

Translation happens at:

  •    MAP Customer Edge (CE): A device functioning as a Customer Edge
                               router in a MAP deployment.  A typical MAP CE
                               adopting MAP Rules will serve a residential
                               site with one WAN-side IPv6-addressed
                               interface and one or more LAN-side interfaces
                               addressed using private IPv4 addressing.
    
       MAP Border Relay (BR):  A MAP-enabled router managed by the service
                               provider at the edge of a MAP domain.  A BR
                               has at least an IPv6-enabled interface and an
                               IPv4 interface connected to the native IPv4
                               network.  A MAP BR may also be referred to as
                               simply a "BR" within the context of MAP.

MAP-T High-Level Architecture


MAPT Configuration

Customer Edge: Enable/Disable MAPT feature with below distro's from build

DISTRO_FEATURES_append = " feature_mapt"
DISTRO_FEATURES_append = " nat46"

Border Relay: Setup done in ubuntu machine ( linux kernel 5.15 )
Installation
  1. sudo apt-get install isc-dhcp-server
  2. Open file /etc/dhcp/dhcpd.conf and update as below

    ddns-update-style none;
    default-lease-time 3600;
    max-lease-time 7200;
    authoritative;
    option custom-upstream-rate code 242 = unsigned integer 32;
    option custom-downstream-rate code 243 = unsigned integer 32;

    option domain-name "hsd.pa.crnrstn.comcast.net" ;

    subnet 10.42.0.0 netmask 255.255.255.0 {
        option routers 10.42.0.10;
        option broadcast-address 10.42.0.255;
        option domain-name-servers 1.1.1.1, 8.8.8.8;
        range 10.42.0.3 10.42.0.254;

    }

  3. Open file /etc/radvd.conf

    interface eth1 {
        AdvSendAdvert on;
        AdvManagedFlag on;
        AdvOtherConfigFlag on;

        prefix 2001:558:6013:100::/64 {
            AdvOnLink on;
            AdvAutonomous on;
        };

    };

  4. Open file  /etc/dhcp/dhcpd6.conf and update as below 

    ddns-update-style none;
    default-lease-time 3600;
    max-lease-time 7200;
    option dhcp-renewal-time 1800;
    option dhcp-rebinding-time 2880;
    option client-class-information code 97 = string;
    authoritative;
    option dhcp6.map-option code 95 = string;
    subnet6 2001:558:6013:0100::/64 {
        range6 2001:558:6013:0100::1000 2001:558:6013:0100::1fff;
        prefix6 2001:558:6013:0100:: 2001:558:6013:fe00:: /56;
        option dhcp6.map-option 00:59:00:16:00:08:18:c0:a8:14:00:30:20:01:05:58:60:13:00:5d:00:04:08:08:00:00:00:5b:00:09:40:00:64:ff:9b:00:00:00:00;
        option dhcp6.name-servers
        2001:4860:4860::8888,
        2001:4860:4860::8844;
    }

  5. Once all changes are done, restart the dhcpd and radvd service.
    sudo systemctl restart isc-dhcp-server
    sudo systemctl restart isc-dhcp-server6
    sudo systemctl restart radvd
    isc-dhcp-server status
    ● isc-dhcp-server.service - ISC DHCP IPv4 server
         Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; disabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 135ms ago
           Docs: man:dhcpd(8)
       Main PID: 45322 (dhcpd)
          Tasks: 4 (limit: 18942)
         Memory: 4.6M
            CPU: 24ms
         CGroup: /system.slice/isc-dhcp-server.service
                 └─45322 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf eth1
    
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: PID file: /run/dhcp-server/dhcpd.pid
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Wrote 3 leases to leases file.
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Wrote 3 leases to leases file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Listening on LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Listening on LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Sending on   LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Sending on   Socket/fallback/fallback-net
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Sending on   LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Sending on   Socket/fallback/fallback-net
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Server starting service.
    ● isc-dhcp-server6.service - ISC DHCP IPv6 server
         Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 122ms ago
           Docs: man:dhcpd(8)
       Main PID: 45333 (dhcpd)
          Tasks: 4 (limit: 18942)
         Memory: 3.3M
            CPU: 18ms
         CGroup: /system.slice/isc-dhcp-server6.service
                 └─45333 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf eth1
    
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: PID file: /run/dhcp-server/dhcpd6.pid
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Wrote 0 NA, 0 TA, 0 PD leases to lease file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Wrote 0 NA, 0 TA, 0 PD leases to lease file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Bound to *:547
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Bound to *:547
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Listening on Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Listening on Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Sending on   Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Sending on   Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Server starting service.
    ● radvd.service - Router advertisement daemon for IPv6
         Loaded: loaded (/lib/systemd/system/radvd.service; disabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 37ms ago
           Docs: man:radvd(8)
        Process: 45348 ExecStartPre=/usr/sbin/radvd --logmethod stderr_clean --configtest (code=exited, status=0/SUCCESS)
        Process: 45349 ExecStart=/usr/sbin/radvd --logmethod stderr_clean (code=exited, status=0/SUCCESS)
       Main PID: 45350 (radvd)
          Tasks: 2 (limit: 18942)
         Memory: 516.0K
            CPU: 64ms
         CGroup: /system.slice/radvd.service
                 ├─45350 /usr/sbin/radvd --logmethod stderr_clean
                 └─45351 /usr/sbin/radvd --logmethod stderr_clean
    
    Apr 06 15:22:33 CHTSL00399 systemd[1]: Starting Router advertisement daemon for IPv6...
    Apr 06 15:22:33 CHTSL00399 radvd[45348]: config file, /etc/radvd.conf, syntax ok
    Apr 06 15:22:33 CHTSL00399 radvd[45349]: version 2.18 started
    Apr 06 15:22:33 CHTSL00399 systemd[1]: Started Router advertisement daemon for IPv6.

Note: If using shared to other computers networkmanager will take care of sharing ipv4 and ipv6 internet. If using manual IP add required FORWARD rules in iptables.
To ping IPv6 add sudo ip6tables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE


Jool Installation

  • Build the jool modules using below build instructions
    Jool Installation
    sudo apt update
    sudo apt upgrade
    sudo apt install build-essential pkg-config
    sudo wget https://github.com/NICMx/Jool/releases/download/v4.2.0-rc2/jool-4.2.0.rc2.tar.gz
    sudo tar -xzf jool-4.2.0.rc2.tar.gz
    sudo /sbin/dkms install jool-4.2.0.rc2/
    cd jool-4.2.0.rc2/
    sudo ./configure
    sudo make
    sudo make install
  • Once build completed, below modules will be generated in respective paths, add those modules to kernel path
    MAPT Modules
    ubuntu:~/jool-4.2.0~rc2$ find . -iname jool*ko
    ./src/mod/mapt/jool_mapt.ko
    ./src/mod/common/jool_common.ko
    ./src/mod/nat64/jool.ko
    /src/mod/siit/jool_siit.ko
    Jool configure
    Modeprobe modules
    sudo modprobe jool_common
    sudo modprobe jool_mapt
    sudo modprobe jool
    
    Enable below modules as well if not enabled
    netfilter/nf_defrag_ipv4.ko
    netfilter/nf_defrag_ipv6.ko
  • Once all modules are loaded and confirmed via lsmod

    ubuntu:~/ lsmod | grep jool*
    jool_mapt                    20480  0
    jool_common             253952  1 jool_mapt
    nf_defrag_ipv6          24576  3 nf_conntrack,openvswitch,jool_mapt
    nf_defrag_ipv4         16384  2 nf_conntrack,jool_mapt
    x_tables                       53248  9 xt_conntrack,nft_compat,xt_state,xt_tcpudp,xt_addrtype,xt_nat,ip_tables,xt_MASQUERADE,jool_mapt

  • Create an instance BR
    BR instance creation
    sudo jool_mapt instance add "BR" --netfilter --dmr 64:ff9b::/64
    sudo jool_mapt -i "BR" fmrt add 2001:558:6013::/48 192.168.20.0/24 8 8
    sudo jool_mapt -i "BR" global update map-t-type BR
    View the created instance using:
    View Instances
    akhil@CHTSL00399:~$ sudo jool_mapt -i BR fmrt display
    +---------------------------------------------+--------------------+----------------+----+
    |                                 IPv6 Prefix |        IPv4 Prefix | EA-bits Length |  a |
    +---------------------------------------------+--------------------+----------------+----+
    |                         2001:558:6013::/48  |    192.168.20.0/24 | 16             |  6 |
    +---------------------------------------------+--------------------+----------------+----+
    akhil@CHTSL00399:~$ sudo jool_mapt instance display
    +--------------------+-----------------+-----------+
    |          Namespace |            Name | Framework |
    +--------------------+-----------------+-----------+
    |           89628c00 |              BR | netfilter |
    +--------------------+-----------------+-----------+
    akhil@CHTSL00399:~$ 
    Enable dubbing for jool using sudo jool_mapt -i BR global update logging-debug true
    cat /var/log/syslog
  • asas



Datamodels


root@Filogic-GW:~# dmcli eRT getv Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
Parameter    1 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapTransportMode
               type:     string,    value: MAPT 
Parameter    2 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapBRPrefix
               type:     string,    value: 64:ff9b::/64 
Parameter    3 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRuleIPv4Prefix
               type:     string,    value: 192.168.20.0 
Parameter    4 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRuleIPv6Prefix
               type:     string,    value: 2001:558:6013::/48 
Parameter    5 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapEALen
               type:       uint,    value: 8 
Parameter    6 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSIDOffset
               type:       uint,    value: 8 
Parameter    7 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSIDLen
               type:       uint,    value: 8 
Parameter    8 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSID
               type:       uint,    value: 0 
Parameter    9 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapIsFMR
               type:       bool,    value: false 
Parameter   10 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapIpv4Address
               type:     string,    value: 192.168.20.254 
Parameter   11 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRatio
               type:       uint,    value: 1 




  • No labels