Skip to content

GrumpyOldTroll/amt

Repository files navigation

$Id: README,v 1.1.1.8 2007/05/09 20:40:42 sachin Exp $

Copyright (c) 2004-2005, Juniper Networks, Inc.
All rights reserved.

Automatic Multicast without Explicit Tunnels (AMT)

AMT provides a way for a host, proxy, or router on a non-multicast
capable network to join multicast groups on a remote multicast
capable network through a relay on that network.

AMT is the product of the MBONED Working Group of the Operations
and Management Area of the IETF.  More information about the MBONED
Working group can be found at
http://www.ietf.org/html.charters/mboned-charter.html.

The lastest version of the internet-draft describing this protocol
at the time of this release are provided in this distribution. Later
versions of the draft or an RFC of this protocol may be found at
the IETF location above.

This distribution provides AMT relay and AMT gateway implementations.
It was developed using FreeBSD 4 and FreeBSD 5. Porting to other
similar operating systems should require only minor modifications.
The gateway in particular uses the tun(4) pseudo-interface driver
which may require modifications for porting.  The relay uses some
low-level socket options that may require changes for use on other
similar operating systems.

Funding for this work was provided by Juniper Networks, Inc.
More information about Juniper Networks, Inc. can be found at
http://www.juniper.net.

Formatting applied with:
clang-format -style="{BasedOnStyle: mozilla, ColumnLimit: 76, IndentWidth: 4, BinPackParameters: false, AlignAfterOpenBracket: DontAlign, ContinuationIndentWidth: 6}"

Currently open issues:

1. Deal with this error correctly when the relay shuts down
    amtgwd: recv relay communication trouble: Connection refused
2. fprintf -> syslog
3. Carefully go through daemonize code and close file descriptors.
4. periodic IGMP queries/timeout through some stateful firewalls
5. SIGINT needs to dump stats
6. XMLRPC interface for management
7. get mtu and allocate packet buffer based on mtu size
8. check for memory leaks (I know there is at least one).

To build:

~~~
apt-get install \
  autoconf \
  libtool-bin \
  make \
  cmake \
  build-essential
./configure
make
~~~

To build the docker container:

~~~
docker build -t amtgw:latest -f gateway/docker/Dockerfile .
~~~

1. v4 data inside v4 tunnel (using mcrx-check from https://github.com/GrumpyOldTroll/libmcrx):

~~~
# point source of (S,G) to docker:
# (NB: use the group's route instead for some apps like VLC)
sudo ip route add 23.212.185.0/24 dev docker0

docker container run -d --rm --name amtgw --privileged amtgw:latest -d 4 -t 4 $(python3 ~/libmcrx/driad.py -f 4 23.212.185.6) 
sleep 1
libmcrx/mcrx-check -g 232.1.1.1 -p 5001 -s 23.212.185.6 -c 0 -d 0 -v
~~~

2-4:

For any use of v6 traffic you first need to enable v6 in docker:

~~~
# enable IPv6 using a /64 in a ULA prefix (RFC4193)
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "ipv6": true,
  "fixed-cidr-v6": "$(python3 -c 'import os; import ipaddress; print(ipaddress.ip_network("fd%s:%s%s:%s%s::/64"%tuple("%02x"%b for b in os.urandom(5))))')"
}
EOF
sudo systemctl reload docker
~~~

2. v6 data inside v4 tunnel:

~~~
# point source of (S,G) to docker:
sudo ip -6 route add 2600:14e0::/48 dev docker0

docker container run -d --rm --name amtgw --privileged \
    grumpyoldtroll/amtgw -d 6 $(python3 ~/libmcrx/driad.py -f 4 2600:14e0::6)
sleep 1
libmcrx/mcrx-check -g ff3e::8000:1 -p 5001 -s 2600:14e0::6 -c 0 -d 0 -v
~~~

3. v6 data inside v6 tunnel:

(breadcrumbs for the v6 nat:
https://medium.com/@skleeschulte/how-to-enable-ipv6-for-docker-containers-on-ubuntu-18-04-c68394a219a2)

~~~
# set up v6 nat for the ULA:
DKRNET=$(grep fixed-cidr-v6 /etc/docker/daemon.json | awk '{print $2;}' | sed -e 's/"\([^"]*\)"/\1/')
sudo ip6tables -t nat -A POSTROUTING -s ${DKRNET} ! -o docker0 -j MASQUERADE

# point source of (S,G) to docker:
sudo ip -6 route add 2600:14e0::/48 dev docker0

docker container run -d --rm --name amtgw --privileged \
    grumpyoldtroll/amtgw -d 6 -t 6 $(python3 ~/libmcrx/driad.py -f 6 2600:14e0::6)
sleep 1
libmcrx/mcrx-check -g ff3e::8000:1 -p 5001 -s 2600:14e0::6 -c 0 -d 0 -v
~~~

4. v4 data inside v6 tunnel:

~~~
# set up v6 nat for the ULA:
DKRNET=$(grep fixed-cidr-v6 /etc/docker/daemon.json | awk '{print $2;}' | sed -e 's/"\([^"]*\)"/\1/')
sudo ip6tables -t nat -A POSTROUTING -s ${DKRNET} ! -o docker0 -j MASQUERADE

# point source of (S,G) to docker:
sudo ip route add 23.212.185.0/24 dev docker0
docker container run -d --rm --name amtgw --privileged amtgw:latest -d 4 -t 6 $(python3 ~/libmcrx/driad.py -f 6 23.212.185.6) 
sleep 1
libmcrx/mcrx-check -g 232.1.1.1 -p 5001 -s 23.212.185.6 -c 0 -d 0 -v
~~~

About

Fork of the AMT protocol reference implementation (RFC 7450) from http://www.utdallas.edu/~ksarac/amt/

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published