diff options
Diffstat (limited to 'net/6to4/files')
-rwxr-xr-x | net/6to4/files/6to4 | 148 | ||||
-rw-r--r-- | net/6to4/files/6to4.8 | 166 | ||||
-rw-r--r-- | net/6to4/files/6to4.conf | 17 | ||||
-rw-r--r-- | net/6to4/files/6to4.html | 210 |
4 files changed, 541 insertions, 0 deletions
diff --git a/net/6to4/files/6to4 b/net/6to4/files/6to4 new file mode 100755 index 00000000000..4c4e5157777 --- /dev/null +++ b/net/6to4/files/6to4 @@ -0,0 +1,148 @@ +#!@LOCALBASE@/bin/perl +# +# Setup 6to4 IPv6, for NetBSD (and maybe others) +# +# (c) Copyright 2000 Hubert Feyrer <hubert@feyrer.de> +# + +#$etcdir="@PREFIX@/etc"; +$etcdir="/usr/pkg/etc"; + +require "$etcdir/6to4.conf"; + +use Getopt::Std; + +########################################################################### +sub run +{ + local($str) = @_; + + if ($not) { + print "$str\n"; + } else { + if ($verbose) { + print "$str\n"; + } + system($str); + } +} + +########################################################################### + +# +# Process options +# +getopts('nvh'); + +$not = 1 if $opt_n; +$verbose = 1 if $opt_v; + +if ($opt_h) { + print "Usage: $0 [-n] [-v] {start | stop | rtadvd-start | rtadvd-stop}\n"; + exit 0; +} + +# +# Some sanity checks +# +if (`ifconfig -a | grep fe80: | wc -l` <= 0 or + `ifconfig -a | grep stf | wc -l` <= 0) { + die "$0: It seems your kernel does not support IPv6 or 6to4 (stf).\n". + "Add 'options INET6' and 'pseudo-device stf 1' to your kernel and retry!\n"; +} + +# +# Figure out IP#s etc. +# +$localadr4 = `ifconfig $out_if inet | grep inet`; +$localadr4 =~ s/^.*inet\s*//; +$localadr4 =~ s/\s.*$//; +chomp($localadr4); + +@l4c = split('\.', $localadr4); +$prefix = sprintf("2002:%02x%02x:%02x%02x", @l4c[0..3]); + +$localadr6 = sprintf("$prefix:%04x", $v6_net); + +chomp($remoteadr4 = `host $peer`); +$remoteadr4 =~ s/^.*address //; + +chomp($remoteadr6 = `host -t AAAA $peer`); +$remoteadr6 =~ s/^.*address //; + + +if ($verbose) { + print "remote v4 address: $remoteadr4\n"; + print "local v4 address: $localadr4\n"; + print "remote v6 address: $remoteadr6\n"; + print "local v6 address: $localadr6:$hostbits6\n"; + print "\n"; +} + + +# +# Handle commands +# + +# stop: +if ( $ARGV[0] eq "stop" ) { + run("ifconfig stf0 down"); + $cmd="ifconfig stf0 inet6 " . + "| grep inet6 " . + "| sed -e 's/inet6//' " . + "-e 's/prefix.*//g' " . + "-e 's/^[ ]*//' " . + "-e 's/[ ]*\$//'"; + foreach $ip ( split('\s+', `$cmd`)) { + run("ifconfig stf0 inet6 -alias $ip"); + } + run("route delete -inet6 default"); +} + +# start: +if ( $ARGV[0] eq "start" ) { + run("ifconfig stf0 inet6 $localadr6:$hostbits6 prefixlen $v6_prefixlen alias"); + run("route add -inet6 default $remoteadr6"); + if ($in_if ne "") { + run("ifconfig $in_if inet6 $prefix:$v6_innernet:$hostbits6"); + } +} + +# rtadvd-stop: +if ($ARGV[0] eq "rtadvd-stop" or $ARGV[0] eq "stop-rtadvd") { + if ( -f "/var/run/rtadvd.pid" ) { + $pid = `cat /var/run/rtadvd.pid`; + run ("kill -TERM $pid"); + run ("rm -f /var/run/rtadvd.pid"); + run ("rm -f /var/run/6to4-rtadvd.conf.$pid"); + } else { + print "no rtadvd running!\n"; + } +} + +# rtadvd-start: +# Write config file for rtadvd to /tmp and start rtadvd: +if ($ARGV[0] eq "rtadvd-start" or $ARGV[0] eq "start-rtadvd" ) { + if ( -f "/var/run/rtadvd.pid" ) { + print "rtadvd already running!\n"; + } else { + $tmpname="/var/run/rtadvd.conf-6to4.$$"; + + print "cat >$tmpname <<EOF\n"; + print "$in_if\\\n"; + print "\t:addrs#1:addr=\"${prefix}:${v6_innernet}::\":prefixlen#64:tc=ether:\n"; + print "EOF\n"; + + open(RC, ">$tmpname") || die "Can't write to "; + print RC "$in_if\\\n"; + print RC "\t:addrs#1:addr=\"${prefix}:${v6_innernet}::\":prefixlen#64:tc=ether:\n"; + close(RC); + + run("rtadvd -c $tmpname $in_if"); + run("sysctl -w net.inet6.ip6.forwarding=1"); + + print "\n"; + print "XXX on your Clients, run:\n"; + print "XXX route add -inet6 default $prefix:$v6_innernet:$hostbits6\n"; + } +} diff --git a/net/6to4/files/6to4.8 b/net/6to4/files/6to4.8 new file mode 100644 index 00000000000..d58794ab16a --- /dev/null +++ b/net/6to4/files/6to4.8 @@ -0,0 +1,166 @@ +.\" $NetBSD: 6to4.8,v 1.1.1.1 2001/02/11 05:24:29 hubertf Exp $ +.Dd February 11, 2001 +.Dt 6to4 8 +.Os +.Sh NAME +.Nm 6to4 +.Nd setup automatic 6to4 IPv6 tunnelling +.Sh SYNOPSIS +.Nm +.Op Fl vn +.Ar command +.Sh DESCRIPTION +The +.Nm +script can be used to setup IPv6 on your home machine and +network for exploring IPv6 without any registrations. 6to4 is a +mechanism by which your IPv6 address(es) are derived from an assigned +IPv4 address, and which involves automatic tunnelling to one or more +remove 6to4 hubs, which will then forward your v6 packets on the 6bone +etc. Replies are routed back to you over IPv4 via (possibly) other +6to4 capable remote gateways. As such, IPv6-in-IPv4-encapsulated +packets are accepted from all v4-hosts. +.Pp +From your (single) IPv4 address, you get a whole IPv6 /48 network, +which allows you to split your network in 2^16 subnets, with 2^64 +hosts each. You need to setup routing for your internal network +properly, help is provided for setting up the border router here. +.Pp +This script takes the burden to calculate your IPv6 address from +existing IPv4 address and runs the commands to setup (and tear down) +automatic 6to4 IPv6 tunnelling. In a seperate step, router +advertisement for the inside network can be started and stopped. +.Pp +Possible options are: +.Bl -tag -width xxx +.It Fl n +Do not. Only print the commands that would be run, but do not execute +them. +.It Fl v +Verbose operation. Print the commands that are about to be run, before +running them. Displays some additional information. +.It Fl h +Show usage. +.El +.Pp +Possible commands are: +.Bl -tag -width rtadvd-start +.It Sy start +Configure 6to4 IPv6. The +.Xr stf 4 +interface is configured, and a default route to a remote 6to4 +gateway is established. In addition, the internal +network interface is assigned an address. +.It Sy stop +Stops 6to4 IPv6. All addresses are removed from the +.Xr stf 4 +device, and the default route is removed. +.It Sy rtadvd-start +Starts router advertizement and IPv6 packet forwarding, +turning the machine into a IPv6 router. +.Xr rtadvd 8 +is invoked with a custom config file created under +.Pa /var/run . +Clients need to be told to use the router as +default (IPv6) router, e.g. by adding a static route. +Follow the on-screen instructions to do so. +.It Sy rtadvd-stop +Stops router advertizement and IPv6 packet forwarding. +.Xr rtadvd 8 +is stopped, and the +.Xr rtadvd.conf 5 +config file is removed from +.Pa /var/run . +.El +.Sh REQUIREMENTS +Besides IPv4 connectivity, you need support for IPv6 and the +.Xr stf 4 +device in your kernel. While the GENERIC NetBSD 1.5 kernel does +support IPv6, it does not contain support for the +.Xr stf 4 +device. +.Pp +Make sure you have the following options in your kernel config file: +.Bd -literal -offset +options INET # IP + ICMP + TCP + UDP +options INET6 # IPV6 +pseudo-device stf 1 # 6to4 IPv6 over IPv4 encapsulation +.Ed +.Pp +No special values are needed in +.Pa /etc/rc.conf . +.Sh CONFIGURATION +The +.Nm +script reads it's configuration from a config file named +.Pa 6to4.conf. +The +.Pa 6to4.conf +file is in +.Xr perl 1 +syntax, and contains several +variables that can be tuned to adjust your setup. Default values +should work for use on a modem dialup. +.Bl -tag -width rtadvd-stop +.It Sy out_if +The outbound interface that has a valid IPv4 address +assigned, that can be used to derive the IPv6 +addresses from. Usually +.Dq ppp0 +for a modem setup, or your ethernet interface if you have +IPv4 connectivity via LAN. This +can't be empty, and is assigned the IPv6 address +2002:x:x:v6_net:hostbits6, see below. +.It Sy in_if +The inside interface. If non-empty, this interface is +assigned the IPv6 address +2002:x:x:v6_innernet:hostbits6, see below. +This is only useful on machines that +have more than one network interfaces, e.g. with a modem and a +local ethernet. +.It Sy v6_net +The subnet address you want to use on the address of +your outbound interface. Defaults to +.Dq 1 . +.It Sy v6_innernet +The subnet address you want to use on the address of +your inbound interface. Defaults to +.Dq 2 . +.It Sy hostbits6 +The lower 64 bits of both the inbound and outbound interface's +addresses. +.It Sy peer +Name of the remote 6to4 server that'll take our +IPv6-in-IPv4 encapsulated packets and route them on +via IPv6. Several possible values are given in the +example config file. +.El +.Sh EXAMPLE USAGE +The +.Nm +script can be run automatically by +.Xr pppd 8 +when a connection is made. For this, put the following into +.Pa /etc/ppp/ip-up : +.Bd -literal -offset +( /usr/pkg/sbin/6to4 stop + /usr/pkg/sbin/6to4 start ) & +.Ed +.Pp +To shut down properly, put this into +.Pa /etc/ppp/ip-down : +.Bd -literal -offset +/usr/pkg/sbin/6to4 stop +.Ed +.Sh SEE ALSO +.Xr stf 4 , +.Dq 6to4 IPv6 Explained +at +.Pa http://www.feyrer.de/NetBSD/6to4.html , +NetBSD IPv6 Documentation at +.Pa http://www.netbsd.org/Documentation/network/ipv6/ . +.Sh HISTORY +The +.Nm +utility and manpage were writte by +Hubert Feyrer <hubert@feyrer.de>. diff --git a/net/6to4/files/6to4.conf b/net/6to4/files/6to4.conf new file mode 100644 index 00000000000..9d527752d15 --- /dev/null +++ b/net/6to4/files/6to4.conf @@ -0,0 +1,17 @@ +# 6to4.conf +# + +$out_if="ppp0"; # Our outgoing (uplink) interface +$in_if=""; # Inside (ethernet) interface + +$v6_net="1"; # 2002:x:x:v6_net:: +$v6_innernet="2"; # 2002:x:x:v6_innernet:: +$v6_prefixlen=16; # Change for more +$hostbits6=":1"; # should be determined via MAC of $in_if + +# Possible remote 6to4 routers: +$peer="6to4.ipv6.fh-regensburg.de"; # Germany, Europe +#$peer="asterix.ipv6.bt.com"; # Great Britain, Europe +#$peer="6to4.kfu.com"; # USA, West coast +#$peer="6to4.ipv6.microsoft.com"; # USA, West coast +#$peer="ipv6-router.cisco.com"; # USA, West coast; register at http://www.cisco.com/ipv6/ diff --git a/net/6to4/files/6to4.html b/net/6to4/files/6to4.html new file mode 100644 index 00000000000..16654733ba0 --- /dev/null +++ b/net/6to4/files/6to4.html @@ -0,0 +1,210 @@ +<html> +<head> + <title> + February 11, 2001 6to4 8 + + </title> + <style type="text/css"> + <!-- + body { margin-left:4%; } + H1 { color: maroon; padding: 4pt; margin-left: -4% } + H2 { color: maroon; padding: 4pt; margin-left: -4% } + H3 { color: maroon; padding: 4pt; margin-left: -4% } + H4 { color: maroon; padding: 4pt; margin-left: -4% } + H5 { color: maroon; padding: 4pt; margin-left: -4% } + --> + </style> +</head> +<body bgcolor="#FFFFFF" text="#000000"> + <h3> + NAME + </h3> +<b>6to4</b> +- setup automatic 6to4 IPv6 tunnelling + <h3> + SYNOPSIS + </h3> +<b>6to4</b> +[<b></b><b>-vn</b>] +<i></i><i>command</i> + <h3> + DESCRIPTION + </h3> +The +<b>6to4</b> +script can be used to setup IPv6 on your home machine and +network for exploring IPv6 without any registrations. 6to4 is a +mechanism by which your IPv6 address(es) are derived from an assigned +IPv4 address, and which involves automatic tunnelling to one or more +remove 6to4 hubs, which will then forward your v6 packets on the 6bone +etc. Replies are routed back to you over IPv4 via (possibly) other +6to4 capable remote gateways. As such, IPv6-in-IPv4-encapsulated +packets are accepted from all v4-hosts. + <p> +From your (single) IPv4 address, you get a whole IPv6 /48 network, +which allows you to split your network in 2^16 subnets, with 2^64 +hosts each. You need to setup routing for your internal network +properly, help is provided for setting up the border router here. + <p> +This script takes the burden to calculate your IPv6 address from +existing IPv4 address and runs the commands to setup (and tear down) +automatic 6to4 IPv6 tunnelling. In a seperate step, router +advertisement for the inside network can be started and stopped. + <p> +Possible options are: +<dl compact> +<p><dt><b></b><b>-n</b><dd> +Do not. Only print the commands that would be run, but do not execute +them. +<p><dt><b></b><b>-v</b><dd> +Verbose operation. Print the commands that are about to be run, before +running them. Displays some additional information. +<p><dt><b></b><b>-h</b><dd> +Show usage. +</dl> + <p> +Possible commands are: +<dl compact> +<p><dt><b></b><b>start</b><dd> +Configure 6to4 IPv6. The +<code>stf(4)</code> +interface is configured, and a default route to a remote 6to4 +gateway is established. In addition, the internal +network interface is assigned an address. +<p><dt><b></b><b>stop</b><dd> +Stops 6to4 IPv6. All addresses are removed from the +<code>stf(4)</code> +device, and the default route is removed. +<p><dt><b></b><b>rtadvd-start</b><dd> +Starts router advertizement and IPv6 packet forwarding, +turning the machine into a IPv6 router. +<code>rtadvd(8)</code> +is invoked with a custom config file created under +<code></code><code>/var/run</code>. +Clients need to be told to use the router as +default (IPv6) router, e.g. by adding a static route. +Follow the on-screen instructions to do so. +<p><dt><b></b><b>rtadvd-stop</b><dd> +Stops router advertizement and IPv6 packet forwarding. +<code>rtadvd(8)</code> +is stopped, and the +<code>rtadvd.conf(5)</code> +config file is removed from +<code></code><code>/var/run</code>. +</dl> + <h3> + REQUIREMENTS + </h3> +Besides IPv4 connectivity, you need support for IPv6 and the +<code>stf(4)</code> +device in your kernel. While the GENERIC NetBSD 1.5 kernel does +support IPv6, it does not contain support for the +<code>stf(4)</code> +device. + <p> +Make sure you have the following options in your kernel config file: +<dl compact><dt><dd> +<code> +<pre> +options INET # IP + ICMP + TCP + UDP +options INET6 # IPV6 +pseudo-device stf 1 # 6to4 IPv6 over IPv4 encapsulation +</pre> +</code> +</dl> + <p> +No special values are needed in +<code></code><code>/etc/rc.conf</code>. + <h3> + CONFIGURATION + </h3> +The +<b>6to4</b> +script reads it's configuration from a config file named +<code></code><code>6to4.conf.</code> +The +<code></code><code>6to4.conf</code> +file is in +<code>perl(1)</code> +syntax, and contains several +variables that can be tuned to adjust your setup. Default values +should work for use on a modem dialup. +<dl compact> +<p><dt><b></b><b>out_if</b><dd> +The outbound interface that has a valid IPv4 address +assigned, that can be used to derive the IPv6 +addresses from. Usually +``ppp0'' +for a modem setup, or your ethernet interface if you have +IPv4 connectivity via LAN. This +can't be empty, and is assigned the IPv6 address +2002:x:x:v6_net:hostbits6, see below. +<p><dt><b></b><b>in_if</b><dd> +The inside interface. If non-empty, this interface is +assigned the IPv6 address +2002:x:x:v6_innernet:hostbits6, see below. +This is only useful on machines that +have more than one network interfaces, e.g. with a modem and a +local ethernet. +<p><dt><b></b><b>v6_net</b><dd> +The subnet address you want to use on the address of +your outbound interface. Defaults to +``1''. +<p><dt><b></b><b>v6_innernet</b><dd> +The subnet address you want to use on the address of +your inbound interface. Defaults to +``2''. +<p><dt><b></b><b>hostbits6</b><dd> +The lower 64 bits of both the inbound and outbound interface's +addresses. +<p><dt><b></b><b>peer</b><dd> +Name of the remote 6to4 server that'll take our +IPv6-in-IPv4 encapsulated packets and route them on +via IPv6. Several possible values are given in the +example config file. +</dl> + <h3> + EXAMPLE USAGE + </h3> +The +<b>6to4</b> +script can be run automatically by +<code>pppd(8)</code> +when a connection is made. For this, put the following into +<code></code><code>/etc/ppp/ip-up</code>: +<dl compact><dt><dd> +<code> +<pre> +( /usr/pkg/sbin/6to4 stop + /usr/pkg/sbin/6to4 start ) & +</pre> +</code> +</dl> + <p> +To shut down properly, put this into +<code></code><code>/etc/ppp/ip-down</code>: +<dl compact><dt><dd> +<code> +<pre> +/usr/pkg/sbin/6to4 stop +</pre> +</code> +</dl> + <h3> + SEE ALSO + </h3> +<code>stf(4)</code>, +``6to4 IPv6 Explained'' +at +<code></code><code>http://www.feyrer.de/NetBSD/6to4.html</code>, +NetBSD IPv6 Documentation at +<code></code><code>http://www.netbsd.org/Documentation/network/ipv6/</code>. + <h3> + HISTORY + </h3> +The +<b>6to4</b> +utility and manpage were writte by +Hubert Feyrer <hubert@feyrer.de>. +</font></body> +</html> |