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的配置項up
、down
,參數解釋如下
--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地址進行訪問了