ip route add 1.2.3.4/32 via 4.3.2.1 src 3.3.3.3
但是在windows上,一切都是內部邏輯自動選擇的,其原則如下:
單網絡卡時,選擇和預設閘道器在同一網段的最匹配ip位址為源;
多網絡卡時,首先選擇預設閘道器所在的網絡卡作為傳送網絡卡,然而在該網絡卡上按照單網絡卡原則選擇乙個ip位址作為源。
然而有時候為了實現自己的一些策略或者小技巧,並不希望系統為我如此自動地封裝源ip位址,比如顯而易見地是在使用openvpn的時候。那麼怎麼辦呢?在《徹底征服windows上openvpn客戶端的源位址選擇問題》中,我已經通過網橋介面的方式解決了這個問題,在不涉及雙網絡卡或者多網絡卡的情形下,我的意思是在單網絡卡時(更加符合常見情況),任意選擇源ip位址將是乙個更加通用的問題了。可是怎麼辦到呢?其實也不難。
首先我們看下所謂的預設閘道器的本質意義是什麼。預設閘道器其實是乙個更加特殊的「下一跳」,它其實就是乙個下一跳位址,這個位址的目的在於將資料報扔給下一跳(廢話),其實它只是乙個輔助作用,真正起作用的是由它解析到的mac位址,因為mac位址才會真正封裝在以太幀當中,那個預設閘道器只是用來得到這個mac位址的,因此如果能靜態指定乙個mac位址,那麼這個預設閘道器可以是任意的。於是就有了乙個辦法:
1.為一條路由生成乙個和欲選擇的源ip位址在同乙個網段的假的預設閘道器,即假的下一跳;
2.為該假閘道器ip位址建立一條靜態的到真閘道器的mac位址的arp對映;
如此一來,源ip位址的選擇過程將完全符合windows的選擇邏輯,我們也就從核心外部繞開了它的限制,從而可以選擇任意的本地連線上配置的位址作為源ip位址。
set destination=%1
set mask=%2
set origw=%3
set source=%4
::獲取預設閘道器(可以自動發現預設閘道器,太花哨,不提倡)
:::getgw
::set origw=
::for /f "delims=: tokens=2" %%i in ('"ipconfig | find /i "default gateway"| findstr [0-9]."') do set origw=%%i
::獲取預設閘道器的mac位址
:getmac
set mac=
for /f "skip=3 tokens=2" %%i in ('arp -a %origw%') do set mac=%%i
echo %mac%|findstr \-
::這裡有個問題,實際上ping失敗(比如閘道器禁止ping)也無所謂,我們需要的只是它的mac位址
::如果連mac位址都不讓解析,那就別當預設閘道器了。因此正確的做法應該搞乙個計數器,連續
::兩次獲取mac失敗就算失敗。
if errorlevel 1 (
ping %origw% -n 1
if errorlevel 1 goto end
goto getmac
)set gw=
set i=
::生成假閘道器位址(很簡單的乙個演算法,欲使用的源ip位址減去1)
for /f "delims=. tokens=4" %%i in ('echo %source%') do set /a host=%%i-1
set i=
set j=
set k=
for /f "delims=. tokens=1,2,3" %%i in ('echo %source%') do set gw=%%i.%%j.%%k.%host%
::設定假閘道器的arp對映
arp -s %gw% %mac%
::新增路由
route add %destination% mask %mask% %gw%
:end
將上述指令碼儲存為"route2.bat"就可以直接用了。
其實,選擇和預設閘道器不屬於同一網段的ip作為源ip位址對於主機而言並非乙個常規的做法,如果如此一來,在資料報返回的時候,當初選擇的源ip位址作為目標位址,本網段的預設閘道器在路由的時候會出現問題,除非它將下一跳指向該ip位址所在的主機的相同網段的位址,否則資料報可能會因為目標位址不可達而被丟棄。
另外,上述的指令碼在靜態建立arp對映的時候有乙個問題,那就是沒有和windows的「死閘道器檢測」功能關聯,這樣就可以在閘道器失效後被notofy了,或者說閘道器並沒有失效,只是換了臺機器,換了mac,此時就需要更新那個mac映**。
windows靜態路由配置方法
顯示本機的路由在命令列下輸入route print 在命令列下輸入如下命令 route p add 10.0.0.0 mask 255.0.0.0 10.10.10.10 所有往10 8訪問的路由,都指向10.10.10.10,並且是persistent路由,電腦重新啟動後仍然有效。關鍵是加 p 引...
Windows基本路由配置 cmd route
1 檢視路由 1 route print 2 配置預設路由,可參考這裡。1 2 route p delete0.0.0.0 刪除舊的預設路由 route p add 0.0.0.0 mask 0.0.0.0 192.168.0.99 metric 1 將預設路由設定為192.168.0.99 上面的...
Windows 雙網絡卡路由配置
刪除預設路由 route delete 0.0.0.0 新增外網路由 route add 0.0.0.0 mask 0.0.0.0 192.168.0.1 metric 4 p 新增內網路由 route add 194.168.13.0 mask 255.255.255.0 194.168.13.1...