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