局域網地址爲何是192.168.X.X?爲何連上公司的VPN就上不了網?

注:本文主要目的是給程序員講述一些局域網/VPN的基本知識,並不涉及到具體的實操。關於如何安裝VPN服務器、配置VPN客戶端及修改Windows路由表等具體實操內容,請自行搜索。html

RFC

局域網地址爲何是192.168.X.X?簡單地說這是RFC的建議,具體請查看: https://tools.ietf.org/html/rfc5735#section-4程序員

準確說,不僅有192.168.X.X,一共有3段地址能夠做爲局域網的地址:服務器


因此看到10開頭的或者192.168開頭的IPv4地址,那就能夠認爲是局域網地址了,比較特殊的是172開頭的,由於它的掩碼是12,不是8的整數倍,因此光看到172開頭的地址還不能立刻肯定是否是局域網地址,要看是否在172.16.X.X至172.31.X.X之間。網絡

既然是建議,那就不是技術上的硬性要求,那麼我能不能把局域網地址設置成別的?答案是確定的。spa

好比你能夠設置成20.8.13.46,看起來像個公網地址對不?但這樣並不會有什麼好處,反而極可能會引發衝突,想一下假如這真的是一個你要訪問的公網地址,那你可能就訪問不到了,由於你的網絡適配器認爲這是個局域網地址,不會走網關到公網去。設計

咱們有個客戶的局域網就是相似這種「非標」的,不按套路出牌,形成了很多困擾。代理

另外提一下RFC,RFC是Request For Comments的意思,意思就是「草案」,Internet開始構建的時候,全世界的工程師們起草的各類文檔,不斷討論更新和修正,因此叫RFC,時過境遷,不少文檔都成爲了事實上的標準,但RFC這個名字慣性太大,保留了下來。htm

爲何要弄3個網段?

由於這3個網段正好對應了A類、B類和C類地址。blog

A類地址組成的局域網能夠容納海量主機,B類地址能容納的主機數量也不少,C類地址則只能夠容納254臺主機。路由

事實上,就算你用了A類地址,你也能夠設置子網掩碼爲24(255.255.255.0的表示,即24個1)來使得這個A類地址和C類地址同樣,只容納254臺主機。

但無論怎麼說,這是一種普遍被接受的約定,因此當系統看到一個A類地址的時候,若是沒有額外的配置說明,就默認它的子網掩碼是8,同理,默認B類地址子網掩碼爲16,C類爲24。

那咱們應該選擇哪一個網段好呢?我認爲用B類地址最爲靈活!爲何?要解釋可不是那麼容易,接着看吧。

爲何連上公司的VPN就上不了網?

嗯?怎麼忽然扯這麼一個風馬牛不相關的問題?沒事,接着看唄。

爲何連上公司的VPN就上不了網?這是一個困擾了不少人的問題,「通俗」(但不正確)的說法就是一旦連上了VPN,就至關於接入了目標的內網去,固然不能正常訪問其它網絡了。我首先聲明這種說法並不正確,下面具體來講說。

站在咱們的視角來講,VPN幹了兩件事情:

1,建立一個虛擬網卡,未鏈接的時候這個網卡是灰色的,即未啓用,這個虛擬網卡咱們稱之爲VPN網絡適配器
2,鏈接VPN的時候,虛擬網卡啓用,並修改Windows的路由表使得部分或所有網絡訪問都透過VPN網絡適配器

VPN網絡適配器能夠在Windows的控制面板的「控制面板\網絡和 Internet\網絡和共享中心」裏的「更改適配器設置」裏看到。咱們程序員先了解到這裏便可,至於VPN客戶端如何與VPN服務器打交道,使用怎樣的隧道協議,過程如何,這個是另外一個超級大的話題了,這裏不表。

從「適配器」這個驅動層面的東西來看,VPN是比較「底層」的,咱們的程序不須要關心這個,不像代理服務器,須要在程序裏設。

如今,連VPN就上不了網這個問題應該怎麼解釋?根據前面提到的那一、2兩步,咱們不難知道,問題出在第2步上,好比你在家裏,你要鏈接公司的內網,IP地址是192.168.20.0/24,如今鏈接,成功,你能輕鬆訪問192.168.20.112這臺主機了,但不幸的是,根據Windows當前的路由表配置,你的任何網絡訪問都會走VPN網絡適配器,因而你訪問taobao.com也會走VPN,但公司的網絡限制了對taobao.com的訪問啊,因此就出現這個問題了。

很顯然,此問題有兩種解,一是讓大家公司IT開放對taobao.com的訪問;二是本身修改Windows路由表,使得對其它網絡(包括公網)的訪問不走VPN。顯然你只能採起第二種方案。

修改路由表是解決這類問題的必殺技,這是能夠確定的,但有時候會比較麻煩,假如你用的VPN客戶端不是Windows自帶的,而是公司/客戶提供的,每次鏈接的時候,它就會在你的Windows的路由表中塞入一大堆很使人費解的配置,這些亂七八糟配置使得你的正常網絡的訪問變得不可能,你要一條條把這些配置刪除,而後把必要的一條路由規則加進去,符合這條規則的才走VPN,不然走原先默認的適配器,這樣是能夠的,可是可是,這種VPN一旦斷開,你重連的時候,你會發現你辛辛苦苦配的Windows路由表又被它重置了,每次都如此,讓人沒法接受,前面我提到的那個用「非標」局域網地址的客戶的VPN就是這樣的……這種狀況很難有好的解,如今咱們討論另外一種更廣泛的狀況,那就是使用的是Windows自帶的VPN客戶端。

能夠在前面提到的控制面板的對應的VPN網絡適配器裏進行下圖這樣的設置,把「在遠程網絡上使用默認網關」這個選項去掉。

這樣在VPN鏈接的時候它就基本上不會修改Windows的路由表,我是說基本上不會,實際上,它會默認加一條路由規則,我研究下來是這樣的一條規則:

假如你鏈接的網絡是192.168.20.0/24,那它就會加這麼一條規則:

192.168.20.0/24 => VPN Adapter

由於Windows認爲192開頭的這個地址是個C類地址,掩碼天然是24,這個時候若是服務主機就在192.168.20.0/24這個網段上,你能夠直接訪問,而且你訪問別的網絡照舊,不會受VPN的影響,很好!

但你要注意,極可能你VPN鏈接到的只是一個VPN LAN的虛擬網絡,而真實的服務器的地址是在192.168.21.0/24這個網段,這時候你發現你訪問不了服務器,由於對192.168.21.0/24這個地址段的訪問不符合路由規則,不走VPN。怎麼辦?

方法一,自行增長一條路由規則:

192.168.21.0/24 => VPN Adapter

此次不算很麻煩,由於規則明確且只有一條,你能夠把這條規則做爲永久規則,即使VPN斷開以後,它依舊還在,不受影響。但要本身設規則,仍是有些麻煩,萬一有些人就是不會呢?能不能更加簡單點?

方法二,從新規劃IP地址!

嗯!繞了半天,終於回來了!

以10.X.X.X做爲局域網地址的狀況

假如鏈接目標爲10.186.2.0/24,而服務主機所在的網段是10.186.3.0/24,咱們看看實際發生什麼事。

因爲10開頭的地址被視做A類地址,它的子網掩碼是8。Windows自動增長的路由規則是:

10.0.0.0/8 => VPN Adapter

你嘗試訪問10.186.3.0/24網段的時候,是符合這條路由規則的,所以你能夠訪問10.186.3.0/24網段的主機。

是否是很神奇?設置成192.168.X.X有問題,換成10.X.X.X就行了。

可是,這裏面可能有問題!那就是前面一直沒提到的地址衝突的問題。

假如你所在的局域網也是10.X.X.X這樣的地址,那就糟糕了,你會發現你本地網絡都無法訪問了,緣由就是符合了這條路由規則,走了VPN。

那使用192.168.X.X地址有沒有可能出現衝突?固然有,好比你的本地網絡是192.168.1.0/24,目標網絡也是192.168.1.0/24,這很是有可能啊,網管們都喜歡這麼設置,那麼衝突是確定的。

以172.X.X.X做爲局域網地址的狀況

我前面提到了,並非172開頭的地址都表示是局域網地址,只有172.16.X.X到172.31.X.X纔是。你們注意,172是屬於B類地址,它默認的掩碼是16,這就頗有趣了,請看下面這個圖:

按照個人掩碼設計,A、B、C、D是4個不一樣的網絡,而根據B類地址默認的掩碼,A和B是同一個網絡,C和D是同一個網絡。假如我是網管,我就用IP地址的第二個數字來區分廠區,廠區和廠區間不直連,而廠區內再用IP地址的第三個數字來區分不一樣的內網,這就是我前面所說的「靈活」。

如今你在圖中的「你的位置」,即A網中,因爲直接的物理鏈接,你是能直接訪問B網的,如今你要用VPN撥到D網,想一想會怎樣?按前面說的,Windows會建立這麼一條路由規則:

172.19.0.0/16 => VPN Adapter

OK不OK?很是OK,你能順利訪問D網,且訪問本地的A網和B網都不受影響。你要注意的只是好好規劃地址,避免直接的衝突就行,好比用172.21.14.0/24這種偏冷門的地址。

相關文章
相關標籤/搜索