xref: /dflybsd-src/share/examples/netgraph/udp.tunnel (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/sh
286d7f5d3SJohn Marino# $FreeBSD: src/share/examples/netgraph/udp.tunnel,v 1.1 2000/01/28 00:44:30 archie Exp $
386d7f5d3SJohn Marino# $DragonFly: src/share/examples/netgraph/udp.tunnel,v 1.2 2003/06/17 04:36:57 dillon Exp $
486d7f5d3SJohn Marino
586d7f5d3SJohn Marino# This script sets up a virtual point-to-point WAN link between
686d7f5d3SJohn Marino# two subnets, using UDP packets as the ``WAN connection.''
786d7f5d3SJohn Marino# The two subnets might be non-routable addresses behind a
886d7f5d3SJohn Marino# firewall.
986d7f5d3SJohn Marino#
1086d7f5d3SJohn Marino
1186d7f5d3SJohn Marino# Here define the local and remote inside networks as well
1286d7f5d3SJohn Marino# as the local and remote outside IP addresses and UDP port
1386d7f5d3SJohn Marino# number that will be used for the tunnel.
1486d7f5d3SJohn Marino#
1586d7f5d3SJohn MarinoLOC_INTERIOR_IP=192.168.1.1
1686d7f5d3SJohn MarinoLOC_EXTERIOR_IP=1.1.1.1
1786d7f5d3SJohn MarinoREM_INTERIOR_IP=192.168.2.1
1886d7f5d3SJohn MarinoREM_EXTERIOR_IP=2.2.2.2
1986d7f5d3SJohn MarinoREM_INSIDE_NET=192.168.2.0
2086d7f5d3SJohn MarinoUDP_TUNNEL_PORT=4028
2186d7f5d3SJohn Marino
2286d7f5d3SJohn Marino# Create the interface node ``ng0'' if it doesn't exist already,
2386d7f5d3SJohn Marino# otherwise just make sure it's not connected to anything.
2486d7f5d3SJohn Marino# In FreeBSD, interfaces cannot be removed so it might already
2586d7f5d3SJohn Marino# be there from before.
2686d7f5d3SJohn Marino#
2786d7f5d3SJohn Marinoif ifconfig ng0 >/dev/null 2>&1; then
2886d7f5d3SJohn Marino	ifconfig ng0 inet down delete >/dev/null 2>&1
2986d7f5d3SJohn Marino	ngctl shutdown ng0:
3086d7f5d3SJohn Marinoelse
3186d7f5d3SJohn Marino	ngctl mkpeer iface dummy inet
3286d7f5d3SJohn Marinofi
3386d7f5d3SJohn Marino
3486d7f5d3SJohn Marino# Attach a UDP socket to the ``inet'' hook of the interface node
3586d7f5d3SJohn Marino# using the ng_ksocket(8) node type.
3686d7f5d3SJohn Marino#
3786d7f5d3SJohn Marinongctl mkpeer ng0: ksocket inet inet/dgram/udp
3886d7f5d3SJohn Marino
3986d7f5d3SJohn Marino# Bind the UDP socket to the local external IP address and port
4086d7f5d3SJohn Marino#
4186d7f5d3SJohn Marinongctl msg ng0:inet bind inet/${LOC_EXTERIOR_IP}:${UDP_TUNNEL_PORT}
4286d7f5d3SJohn Marino
4386d7f5d3SJohn Marino# Connect the UDP socket to the peer's external IP address and port
4486d7f5d3SJohn Marino#
4586d7f5d3SJohn Marinongctl msg ng0:inet connect inet/${REM_EXTERIOR_IP}:${UDP_TUNNEL_PORT}
4686d7f5d3SJohn Marino
4786d7f5d3SJohn Marino# Configure the point-to-point interface
4886d7f5d3SJohn Marino#
4986d7f5d3SJohn Marinoifconfig ng0 ${LOC_INTERIOR_IP} ${REM_INTERIOR_IP}
5086d7f5d3SJohn Marino
5186d7f5d3SJohn Marino# Add a route to the peer's interior network via the tunnel
5286d7f5d3SJohn Marino#
5386d7f5d3SJohn Marinoroute add ${REM_INSIDE_NET} ${REM_INTERIOR_IP}
5486d7f5d3SJohn Marino
55