Open VPN連接後自動修改hosts文件

Open VPN 連接後域名不可用問題

  在非辦公環境中連接辦公網絡需要使用VPN進入公司內網,如果公司內網若沒有域名解析,存在使用VPN連接後外網域名不可用,需要使用IP或者修改hosts文件來訪問。

  在這裏其實可以通過Open VPN的配置和bat腳本幫助我們修改hosts文件,實現域名自動解析,避免每次打開連接/斷開VPN都需要修改hosts文件或者不同環境使用不同IP的問題

一、修改hosts文件:

  使用記事本打開C:\Windows\System32\drivers\etc\host文件,向文件末尾換行追加加Ip與域名關聯,中間用空格隔開,如:

# IP地址          域名
#192.168.1.97     rhino.acme.com
#192.168.1.98     x.acme.com  

一般進入在公司內網環境域名所對應的ip都是192.168.*的Ip,本文使用192.168.1網段作爲示例,使用#開頭則代表不可用的註釋。

二、創建自動修改hosts文件腳本

  進入OpenVpn的配置目錄,一般爲C:\Program Files\OpenVPN\config,此目錄存放的時vpn的證書與配置,配置文件爲*.ovpn後綴文件

創建文件hosts.bat,使用記事本打開該文件,添加如下內容保存

@echo off

REM ________________________________________________________________

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

if '%errorlevel%' NEQ '0' (
    echo 請求管理員權限...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"

REM ________________________________________________________________

if "%1" == "open" goto SWITCH
if "%1" == "close" goto SWITCH
echo "error parameter %*"
goto END

:SWITCH
setlocal EnableDelayedExpansion

set HOSTS_FILE=C:\Windows\System32\drivers\etc\hosts

rem 讀取HOSTS_FILE所有內容
for /f "eol=* tokens=*" %%i in (%HOSTS_FILE%) do (
rem 設置變量a爲每行內容
set a=%%i
rem 字符串替換
if "%1" == "open" (
    set "a=!a:#192.168.1=192.168.1!"
) else (
    echo !a! | findstr "^#" >nul
    if !errorlevel! NEQ 0 set "a=!a:192.168.1=#192.168.1!"
)
rem 把修改後的全部行存入$
echo !a!>>$)
rem 用$的內容替換原來文件
move $ %HOSTS_FILE% >nul

:END

該文件可以根據參數修改hosts文件(註釋/打開IP與域名的映射)

創建connect.bat文件,使用記事本打開該文件,添加如下內容保存

@echo off

call "%~dp0hosts.bat" open

創建disconnect.bat文件,使用記事本打開該文件,添加如下內容保存

@echo off

call "%~dp0hosts.bat" close

修改Open VPN配置文件

  在這裏需要了解兩個Open Vpn的配置項updown,參數解釋如下

--up cmd        : Run command cmd after successful tun device open.
                  Execute as: cmd tun/tap-dev tun-mtu link-mtu \
                              ifconfig-local-ip ifconfig-remote-ip
                  (pre --user or --group UID/GID change)

--down cmd      : Run command cmd after tun device close.
                  (post --user/--group UID/GID change and/or --chroot)
                  (command parameters are same as --up option)

  簡單來說up在連接建立的時候執行的cmd腳本,down在連接斷開的時候執行cmd腳本

  打開C:\Program Files\OpenVPN\config下的*.ovpn文件,向文件末尾追加內容,如下:

up connect.bat
down disconnect.bat

測試效果:

  此時打開Open Vpn進行連接hosts文件就會刪除我們添加IP與域名映射前的#符號,使IP與域名映射可用,在Open Vpn斷開連接後會還原IP與域名映射前的#符號。不在需要我們手動修改hosts文件或者在不同環境使用不同的IP地址進行訪問了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章