Tuesday, September 27, 2011

Cisco VPN Client - Auto-connect & remember password

My ISP disconnects the DSL line every 8 hours (+new public IP) and thus my company VPN connection is disconnected as well. As this is very annoying I configured my VPN Client (Windows, 5.0.07.0410) to automatically connect and to remember my password.

To enable auto-connect (Automatic VPN Initiation) edit the file vpnclient.ini (for my case this file is located in folder "C:\Program Files\Cisco Systems\VPN Client") and add the following lines:

...
AutoInitiationEnable=1
AutoInitiationRetryInterval=15
AutoInitiationRetryIntervalType=1
AutoInitiationList=aconn
EnableLog=0
[aconn]
ConnectionEntry=MyCompany
Connect=1
...


The param "AutoInitiationRetryInterval" is used to set the reconnect interval (in minutes or seconds) depending on "AutoInitiationRetryIntervalType" where 0=minutes and 1=seconds.
I created a new ini section named "aconn" for my connection entry "MyCompany" (points to a connection profile named "MyCompany.pcf"), here you simply replace "MyCompany" with the name of your connection entry (fyi, you can add multiple ini sections comma separated to param "AutoInitiationList").

Regarding remembering the password the admin can override your settings in the remote profile (which happend in my case), so I had to do a little trick here. Exit the VPN client and open the respective local profile file (for my case the profile files are located in folder "C:\Program Files\Cisco Systems\VPN Client\Profiles") and add the following lines:

...
SaveUserPassword=1
UserPassword=mySecret
enc_UserPassword=

...

Set param "UserPassword" to your actual password, safe the file and make the profile file READ ONLY, because whenever you connect successfully the remote profile settings will override some of your local settings!
NOTE: Please do not forget to remove the read only flag whenever you want to edit the profile.

Now the VPN client should now automatically (re)connect. I know that this mini HowTo is not the sorcerer's stone, but I hope it saves you from waste of time for googling around and trial&error.

br
≠ logic

References:
http://www.cisco.com/en/US/docs/security/vpn_client/cisco_vpn_client/vpn_client46/administration/guide/vcAch4.html

Wednesday, September 21, 2011

FreeFileSync - Wake On LAN for NAS (Buffalo LinkStation™ Duo)

Last week after my hard-disk crashed and I realized that my backups are outdated, I decided to do it right this time. So I purchased a Buffalo Link Station Duo (2TB,Raid1, good price-performance ratio) as backup device and was absolutely convinced that with a few clicks I could easily setup a pure Windows based backup scenario.
But first of all my Windows7 Home Premium doesn't support SyncCenter and the second issue is that I was not happy with the "NAS PM Service", which caused the NAS station to start-up when ever I turned on my PC. This almost jeopardized my initial idea, because all I wanted to achieve was to activate the NAS, run the backup and finally shutdown the NAS until the next time the scheduler runs.
Time for some hands-on!

So here is my solution which works without the Buffalo NASNavi Suite and may work for other vendors/products as well:

In combination with the utility WolCmd.exe I created 2 additional scripts (WOL.bat,WOL.svn) which I use to wake-up and/or keep-alive the NAS. Simply download WolCmd.exe, create WOL.bat, WOL.svn (find source code below) and copy the files to (for now the directory is hard coded) C:\Program Files\Utils. Once this is done you can use WOL.bat for ...

Linkstation wakeup
"C:\Program Files\Utils\WOL.bat" wol [MAC] [IP] [NetMask] [Port] [Runs] [Interval in seconds]
Example:
"C:\Program Files\Utils\WOL.bat" wol 4ce6XXXXXXXX 10.0.0.XX 255.255.255.0 9 5 45

Start Linkstation keepalive
"C:\Program Files\Utils\WOL.bat" start [jobID] [IP] [NetMask] [Port] [Interval in seconds]
Example:
"C:\Program Files\Utils\WOL.bat" start backup 4ce6XXXXXXXX 10.0.0.XX 255.255.255.0 9 5

Stop Linkstation keepalive
"C:\Program Files\Utils\WOL.bat" end [jobID]
Example:
"C:\Program Files\Utils\WOL.bat" end backup

Using the Windows Task Scheduler and FreeFileSync I now run a daily backup and the Linkstation is only active while FreeFileSync runs (+ a couple of minutes until it shuts down). The image below shall give you an idea how to use WOL.bat to wake-up (duration 5*45s) and keep-alive (5s interval) your Linkstation while your e.g. backup executes.



I hope this information is useful for you, helps to conserve energy and please apologize if there are typo(s), grammar error(s), etc. because my native language is German (and this is my first blog entry).

br
≠ logic
  • Software
FreeFileSync http://sourceforge.net/projects/freefilesync/
WolCmd.exe - http://www.depicus.com/wake-on-lan/wake-on-lan-cmd.aspx
  • Scripts
WOL.bat

@ECHO OFF

IF /I "%1"=="__myself" (

    FOR /L %%l IN (0,0,0) DO (

        :: WOL command example -- "C:\Program Files\Utils\WolCmd.exe" 4ce67696094b 10.0.0.62 255.255.255.0 9
        "C:\Program Files\Utils\WolCmd.exe" %3 %4 %5 %6

        :: Delay for n (>1) seconds
        ping -n %7 127.0.0.1 > nul
    )

) ELSE (

    SET prefix=w0L_-
    SET postfix=-_L0w

    IF /I "%1"=="start" (

        :: ECHO %0 __myself %prefix%%2%postfix% %3 %4 %5 %6 %7
        START "%2" /I /MIN cmd.exe /C %0 __myself %prefix%%2%postfix% %3 %4 %5 %6 %7

    ) ELSE (

        IF /I "%1"=="end" (

            START "Kill: %2" /I cmd.exe /C cscript "%~dp0WOL.vbs" %prefix%%2%postfix%

        ) ELSE (

            IF /I "%1"=="wol" (

                FOR /L %%l IN (%6,-1,1) DO (

                    :: WOL command example -- "C:\Program Files\Utils\WolCmd.exe" 4ce67696094b 10.0.0.62 255.255.255.0 9
                    "C:\Program Files\Utils\WolCmd.exe" %2 %3 %4 %5

                    :: Delay for n (>1) seconds
                    ping -n %7 127.0.0.1 > nul
                )
            )
        )
    )
)


WOL.vbs

Set oShell = CreateObject("WScript.Shell")

if WScript.Arguments.Count >= 1 then

    Dim objWMIService
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
    Dim colProcess
    Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'cmd.exe'")

    For Each objProcess in colProcess

        Dim re1,re2
        Set re1 = new RegExp
        Set re2 = new RegExp

        re1.Pattern = ".*[ ]{1}__myself[ ]{1}.*"
        re2.Pattern = ".*[ ]{1}" & WScript.Arguments(0) & "[ ]{1}.*"

        Dim m1,m2
        Set m1 = re1.Execute(objProcess.CommandLine)
        Set m2 = re2.Execute(objProcess.CommandLine)

        WSCript.Echo m1.Count & "|" & re1.Pattern & "|" & objProcess.CommandLine
        WSCript.Echo m2.Count & "|" & re2.Pattern & "|" & objProcess.CommandLine

        if m1.Count > 0 AND m2.Count > 0 then

            WSCript.Echo objProcess.CommandLine

            objProcess.Terminate()
            WScript.Quit()

        end if

    Next

end if