Giter VIP home page Giter VIP logo

amt's Introduction

$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
~~~

amt's People

Contributors

grumpyoldtroll avatar bugbaron avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.