All pastes #247581 Raw Edit

Miscellany

public text v1 · immutable
#247581 ·published 2006-11-13 17:49 UTC
rendered paste body
@echo off
rem
rem #$Id: windows.bat,v 1.57 2006/05/23 20:05:14 krause Exp $
rem
rem This source code copyright (c) Hexago Inc. 2002-2005.
rem
rem LICENSE NOTICE: You may use and modify this source code only if you
rem have executed a valid license agreement with Hexago Inc. granting
rem you the right to do so, the said license agreement governing such
rem use and modifications.   Copyright or other intellectual property
rem notices are not to be removed from the source code.
rem 
rem **************************************
rem * Tunnel Server Protocol version 1.0 *
rem * Host configuration script          *
rem * Windows 200 and XP are supported   *
rem **************************************
rem * This script keeps a log
rem

set LOG=NUL
set LOG2=NUL
if     %TSP_VERBOSE% == 3 set LOG2=CON
if not %TSP_VERBOSE% == 0 set LOG=CON

date /T 
time /T 

set NEWSTACK=NO
set WINDOWS_VERSION=0

Rem This is the name of the v6v4 we will
Rem spawn under XP sp1 & sp2
set TEMPLATE_V6V4_TUNNEL_INTERFACE=hexago_tunv6

Rem ***** Script a tunnel "on-line" **********

:begin
echo Testing IPv6 presence
if errorlevel 1 goto fail0

echo Testing Windows NT version

Rem OS might have been preseted
if X%TSP_CLIENT_OS% == X goto testver

Echo Got the OS value %TSP_CLIENT_OS% preset from the broker
if %TSP_CLIENT_OS% == winXPSP1 set WINDOWS_VERSION=1
if %TSP_CLIENT_OS% == winXPSP2 set WINDOWS_VERSION=2
if %TSP_CLIENT_OS% == winXP set WINDOWS_VERSION=3
if %TSP_CLIENT_OS% == win2000 set WINDOWS_VERSION=4

if not %WINDOWS_VERSION% == 0 goto donttestver

:testver
Rem Use internal tool to determine version
"%TSP_HOME_DIR%\template\win-ver.exe"
set WINDOWS_VERSION=%errorlevel%

:donttestver

if %WINDOWS_VERSION% == 1 goto windows_xp_storage
if %WINDOWS_VERSION% == 2 goto windows_xp_storage
if %WINDOWS_VERSION% == 3 goto windows_xp
if %WINDOWS_VERSION% == 4 goto windows_2000

Rem *** Windows XP script path ***

:windows_xp_storage
Rem set what we change to be non persistant
set STORAGEARG=store=active

:windows_xp
echo Cycling the interfaces
devcon.exe disable TAPTUNv6 > NUL
netsh.exe interface ipv6 delete interface %TEMPLATE_V6V4_TUNNEL_INTERFACE% > NUL

Rem are we setting up nat traversal or V6V4 or V4V6?
if %TSP_TUNNEL_MODE% == v6udpv4 goto v6udpv4_config
if %TSP_TUNNEL_MODE% == v4v6 goto v4v6_config

Rem else, setup v6v4
Rem can we spawn our own GIF interface on this os?
if %WINDOWS_VERSION% == 1 goto create_gif
if %WINDOWS_VERSION% == 2 goto create_gif
goto older_xp

:create_gif
echo Configuring V6V4 for XP Service Pack 1 and newer
echo Overriding TSP_TUNNEL_INTERFACE from %TSP_TUNNEL_INTERFACE% to 

%TEMPLATE_V6V4_TUNNEL_INTERFACE%
set TSP_TUNNEL_INTERFACE=%TEMPLATE_V6V4_TUNNEL_INTERFACE%

netsh.exe interface ipv6 add v6v4tunnel %TSP_TUNNEL_INTERFACE% %TSP_CLIENT_ADDRESS_IPV4% 

%TSP_SERVER_ADDRESS_IPV4% > NUL
if errorlevel 1 goto fail9

netsh.exe interface ipv6 add address %TSP_TUNNEL_INTERFACE% %TSP_CLIENT_ADDRESS_IPV6% 

%STORAGEARG% > NUL
if errorlevel 1 goto fail2

netsh.exe interface ipv6 add route ::/0 %TSP_TUNNEL_INTERFACE% publish=yes %STORAGEARG% > 

NUL
if errorlevel 1 goto fail1

goto set_mtu

:older_xp
echo Configuring V6V4 for XP with no service pack
netsh.exe interface ipv6 add route prefix=::/0 interface=2 

nexthop=::%TSP_SERVER_ADDRESS_IPV4% publish=yes > NUL
if errorlevel 1 goto fail1

netsh.exe interface ipv6 add address interface=2 address=%TSP_CLIENT_ADDRESS_IPV6% > NUL
if errorlevel 1 goto fail2

:set_mtu
Rem We skip mtu setting if in windows XP without any SP, it doesnt support it
if %WINDOWS_VERSION% == 3 goto check_router_config
echo Setting MTU to 1280 on tunnel interface "%TSP_TUNNEL_INTERFACE%"
netsh.exe interface ipv6 set interface interface="%TSP_TUNNEL_INTERFACE%" mtu=1280 > NUL
if errorlevel 1 goto fail8

:check_router_config
if %TSP_HOST_TYPE% == router GOTO router_config
goto success

:v6udpv4_config
echo Configuring for V6UDPV4 (NAT traversal)

Rem Let's enable the TUN interface
echo Enabling the V6UDPV4 interface
devcon.exe enable TAPTUNv6 > NUL
Rem Enabling TUN takes 3-5 seconds. Since there's no sleep command on XP, ping is a cheap 

trick
Rem to make it wait during a specific time.

netsh.exe interface ipv6 set address "%TSP_TUNNEL_INTERFACE%" %TSP_CLIENT_ADDRESS_IPV6% 

%STORAGEARG% > NUL
if errorlevel 1 goto fail3

Rem We skip mtu setting if in windows XP without any SP, it doesnt support it
if %WINDOWS_VERSION% == 3 goto skip_set_mtu
echo Setting MTU to 1280 on tunnel interface "%TSP_TUNNEL_INTERFACE%"
netsh.exe interface ipv6 set interface interface="%TSP_TUNNEL_INTERFACE%" mtu=1280 

%STORAGEARG% > NUL
if errorlevel 1 goto fail8

:skip_set_mtu
netsh.exe interface ipv6 add route %TSP_SERVER_ADDRESS_IPV6%/128 "%TSP_TUNNEL_INTERFACE%" 

%STORAGEARG% > NUL
if errorlevel 1 goto fail3

netsh.exe interface ipv6 add route ::/0 "%TSP_TUNNEL_INTERFACE%" %TSP_SERVER_ADDRESS_IPV6% 

publish=yes %STORAGEARG% > NUL
if errorlevel 1 goto fail3

if %TSP_HOST_TYPE% == router GOTO router_config
goto success

:v4v6_config
echo Configuring for V4V6, %TSP_CLIENT_ADDRESS_IPV4% to %TSP_SERVER_ADDRESS_IPV4% on 

%TSP_TUNNEL_INTERFACE%...

netsh.exe interface ip set address "%TSP_TUNNEL_INTERFACE%" static %TSP_CLIENT_ADDRESS_IPV4% 

255.255.255.0 > NUL
route.exe add %TSP_SERVER_ADDRESS_IPV4% mask 255.255.255.255 %TSP_CLIENT_ADDRESS_IPV4%
route.exe add 0.0.0.0 mask 0.0.0.0 %TSP_SERVER_ADDRESS_IPV4%
goto success_v4v6

:router_config
echo This computer will be configured as IPv6 router and it will do router advertisements 

for autoconfiguration 
echo Configuring the %TSP_HOME_INTERFACE%  
netsh.exe interface ipv6 add address "%TSP_HOME_INTERFACE%" %TSP_PREFIX%::1 %STORAGEARG% > 

NUL
if errorlevel 1 goto fail6

echo Configuring IPv6_forwading on every the internal and external interfaces 

netsh.exe interface ipv6 set interface interface="%TSP_TUNNEL_INTERFACE%" forwarding=enabled 

%STORAGEARG% > NUL
netsh.exe interface ipv6 set interface interface="%TSP_HOME_INTERFACE%" forwarding=enabled 

%STORAGEARG% > NUL
netsh.exe interface ipv6 set interface interface=2 forwarding=enabled %STORAGEARG%  > NUL

Rem fix for XP with no service pack. forwarding only works if enabled 
Rem on the 6to4 interface. 
if %WINDOWS_VERSION% == 3 netsh.exe interface ipv6 set interface interface=3 

forwarding=enabled %STORAGEARG% > NUL

echo Configuring routing advertisement on the specified interface 
netsh.exe interface ipv6 set interface "%TSP_HOME_INTERFACE%" advertise=enabled %STORAGEARG% 

> NUL
if errorlevel 1 goto fail7

echo You got the IPv6 prefix : %TSP_PREFIX%/%TSP_PREFIXLEN% 
netsh.exe interface ipv6 add route prefix=%TSP_PREFIX%::/64 interface="%TSP_HOME_INTERFACE%" 

siteprefixlength=64 publish=yes %STORAGEARG% > NUL
if errorlevel 1 goto fail4
goto success


Rem *** Windows 2000 script path ***

:windows_2000
if %TSP_TUNNEL_MODE% == v6udpv4 goto fail3
echo IPv4 tunnel server address configured : %TSP_SERVER_ADDRESS_IPV4%
ipv6.exe rtu ::/0 2/::%TSP_SERVER_ADDRESS_IPV4% pub
if errorlevel 1 goto fail1

echo IPv6 host address configured : %TSP_CLIENT_ADDRESS_IPV6% 
ipv6.exe adu 2/%TSP_CLIENT_ADDRESS_IPV6% 
if errorlevel 1 goto fail2
if %TSP_HOST_TYPE% == router GOTO router_config_2000
goto success

:router_config_2000
echo This computer will be configured as IPv6 router and it will do router advertisements 

for autoconfiguration > %LOG%
echo Configuring IPv6_forwarding

Rem we turn on forwarding on all interfaces here
Rem to address the fact we need to enable it
Rem on the 6to4 interface and its interface
Rem number is variable

ipv6.exe ifc %TSP_HOME_INTERFACE% forwards
ipv6.exe ifc 2 forwards  
ipv6.exe ifc 3 forwards 
ipv6.exe ifc 4 forwards 
ipv6.exe ifc 5 forwards 
ipv6.exe ifc 6 forwards 
ipv6.exe ifc 7 forwards 
ipv6.exe ifc 8 forwards

echo Configuring routing advertisement on the specified interface 
ipv6.exe ifc %TSP_HOME_INTERFACE% advertises

echo You got the IPv6 prefix : %TSP_PREFIX%::/%TSP_PREFIXLEN% 
echo Your network interface %TSP_HOME_INTERFACE% will advertise %TSP_PREFIX%::/64 
ipv6.exe rtu %TSP_PREFIX%::/64 %TSP_HOME_INTERFACE% publish life 86400 spl 64 
if errorlevel 1 goto fail4
echo Address %TSP_PREFIX%::1 confired on interface %TSP_HOME_INTERFACE%
ipv6.exe adu %TSP_HOME_INTERFACE%/%TSP_PREFIX%::1 
goto success

:fail0
echo Failed : IPv6 not installed. Use the command "ipv6 install" to enable it. 
exit 1
goto end

:fail1
Echo Failed : cannot use the IPv4 tunnel server address 
exit 1
goto end

:fail2
Echo Failed : cannot use the IPv6 host address 
exit 1
goto end

:fail3
Echo Failed : cannot setup nat traversal 
exit 1
goto end

:fail4
Echo Failed : cannot assign the %TSP_PREFIX% route on interface %TSP_HOME_INTERFACE%
exit 1
goto end

:fail5 
Echo Failed : cannot disable the firewall on the outgoing interface 
exit 1
goto end

:fail6 
Echo Failed : cannot configure %TSP_PREFIX% on the %TSP_HOME_INTERFACE% interface 
exit 1
goto end

:fail7 
Echo Failed : cannot advertise the prefix %TSP_PREFIX%/64 on interface %TSP_HOME_INTERFACE% 
exit 1
goto end

:fail8
Echo Failed : cannot set the MTU to 1280 on the tunnel interface 
exit 1
goto end

:fail9
Echo Failed : cannot create a new v6v4 tunnel interface
exit 1
goto end

:success
Echo Success ! Now, you're ready to use IPv6 connectivity to Internet IPv6
rem Echo Your host is configured to use this IPv6 address : %TSP_CLIENT_ADDRESS_IPV6%
if %TSP_HOST_TYPE% == router GOTO success2
goto end

:success2
Echo The tunnel server uses this IPv6 address : %TSP_SERVER_ADDRESS_IPV6%
Echo The prefix advertised is %TSP_PREFIX%/64 on interface %TSP_HOME_INTERFACE%
goto end

:success_v4v6
Echo Success! Now, you're ready to use IPv4 over IPv6!
goto end

:end

Echo End of the script