1. 程式人生 > >路由器埠對映後 公網正常訪問 而區域網無法通過公網IP訪問

路由器埠對映後 公網正常訪問 而區域網無法通過公網IP訪問



問題:在NR289-E 路由器對8010埠進行對映(虛擬服務),對映到我自己的電腦的80埠,設定成功後,但在本機上(即192.168.1.80這臺PC機)訪問域名和外網ip時,都是無法開啟,還以為是對映不成功或是被路由器遮蔽了呢!

一直沒法解決,只好因vpn功能,讓別人訪問。

不管它了,字翻·牆的時候無意間試了試,發現能訪問,於是經過確認才知道外網可以訪問,內網不能訪問。

在王龍找到一個叫 a龍的QQ網友,給了詳細的解釋。

本來就是這樣,不是你的問題。所有類似你這樣的做法,都是外網可以訪問,內網不能訪問。

簡單說明一下:

假設你的外網IP為 202.1.1.1 內網有2臺192.168.1.10  192.168.1.11

做了IP地址對映  202.1.1.1:80->192.168.1.10:80

1。公網PC1訪問你的站點

PC1:X->202.1.1.1:80   (1個session 包含:[source ip:source  port , desti p:dest port]4個引數 )
地址轉換後:  pc1:x->192.168.1.0:80

192.168.1.0 到資料後,發資料給源站點

192.168.10:80->pc1:x  經過地址轉換 202.1.1.1:80->pc1:x

所以外網可以訪問你對映的站點.

2。如果在內網訪問

192.168.1.11:x->202.1.1.1:80  地址轉換後 192.168.1.11:x->192.168.1.10:80 到達站點

站點返回資料:

192.168.1.10:80->192.168.1.11:x
這裡是關鍵:192.168.1.10檢查後發現目標ip為192.168.1.11為同一網段,
所以直接把資料發給192.168.1.11,不再通過202.1.1.1轉發。

但是,192.168.1.11是向202.1.1.1發起連線,並沒有和192.168.1.10連線,所以將丟棄192.168.1.10發回的資料

也就是說 192.168.1.11訪問202.1.1.1永遠也連線不上。

===========

前段時間在公司的路由器上配置把公網IP對映到區域網中的一臺電腦,對映為web伺服器,在公司外面可以使用公網IP正常訪問web服務,但公司內部使用公網IP確無法訪問web服務。最開始以為是路由器配置問題,多次排查配置,沒有發現問題;然後想到會不會是本機路由表的問題,嘗試設定一些靜態路由,問題依然沒有解決;最後終於在網上找到類似的問題,原因是路由器硬體的問題,路由器不支援資料迴流造成。

關於“資料迴流”介紹,在網上看到一篇很好的文章以下轉帖。原文地址:http://www.5mwl.com/thread-17384-1-1.html

迴流是什麼?最簡單的一個例項:
網咖內網一臺主機192.168.0.2建了個WEB服務站點埠80,然後在閘道器(其內網地址是192.168.0.1、公網地址為218.4.218.4)上對映80埠到192.168.0.2的80埠,這樣INTERNET上就能以http://218.4.218.4:80的地址訪問到192.168.0.2的WEB站點了。然後出現了個問題,在同網咖的另一臺電腦192.168.0.3上,鍵入http://218.4.218.4:80,卻無法訪問該WEB站點。就這個現象,我們就稱之為“不支援迴流”了,這裡指的是閘道器上的對映方式不支援迴流,所以說“迴流”一說,是針對對映方式而言的。

現在我們來看常規情況下,是為什麼會發生這種情況的

過程如下:
192.168.0.3要請求訪問218.4.218.4的80埠,根據它掌握的路由表,它本身是不知道電腦218.4.218.4在哪裡的,所以把將這個資料包傳送給它的預設路由,即電腦192.168.0.1。注意:這個資料包的源地址是192.168.0.3、源埠假設是1025、目標地址是218.4.218.4、目標埠是80、SYN標誌位為1、這是建立TCP連線的第一次握手。如果“把目標地址為218.4.218.4的資料包發給了192.168.0.1”你聽起來覺得有點矛盾,那麼我解釋一下:其實這個資料包的目標IP地址是218.4.218.4,目標MAC地址卻是192.168.0.1的電腦192.168.0.1接收到了這份資料包(因為它的身份是路由器,所以允許接收和轉發目標地址不是自已、MAC地址卻是自已介面 MAC地址的資料包),它分析這個資料包的目標地址,發現這個資料包是需要中轉到電腦192.168.0.2:80去的,於是它把這個資料包轉發給了電腦 192.168.0.2:80。注意:這個資料包的源地址是192.168.0.3、源埠是1025、目標地址為192.168.0.2、目標埠為80、SYN標誌位為1。我們要注意這個資料包在轉發後發生了變化了,即目標地址變了。電腦192.168.0.2順利接到了資料包,它馬上作出迴應,傳送一個數據包給電腦192.168.0.3。注意:這個資料包的源地址是192.168.0.2、源埠是80、目標地址192.168.0.3、目標埠為1025、SYN標誌位為1、ACK標誌位為1、這是建立TCP連線的第二次握手。電腦192.168.0.3順利接到了資料包,然而它發現這是一個來自192.168.0.2:80的迴應,因為ACK標誌位值為1擺在那裡呢。它想不起來什麼時候給192.168.0.2:80這個目標物件傳送過SYN請求,它認為這是一個錯誤的資料包,於是決定把這個資料包丟棄。然後繼續等待 218.4.218.4:80的迴應,一直等到超時。而電腦192.168.0.2這邊,它等192.168.0.3:1025的第三次握手請求包傳送過來,以便建立一個TCP的連線。同樣也沒有結果,一直等到超時。三次握手在規定的時間內沒有完成,訪問宣佈流產了。

那麼怎麼樣才能正常訪問呢?也就是說怎麼樣形成“迴流”呢?
玄機在於電腦192.168.0.1把第一次握手的那個資料包在轉發時,不僅要修改目標地址和埠,也要修改源地址和埠,我們來看一下情況會有什麼不同:電腦192.168.0.1接收到了這份資料包(因為它的身份是路由器,所以允許接收和轉發目標IP地址不是自已、MAC地址卻是自已介面MAC地址的資料包),它分析這個資料包的目標地址,發現這個資料包是需要中轉到電腦192.168.0.2:80去的,於是它把這個資料包通過自已的5201埠轉發給了電腦192.168.0.2:80,並在記憶體裡面記錄下來了,192.168.0.1:5201已定位給了192.168.0.3:1025。注意:這個資料包的源地址是192.168.0.1、源埠是5201、目標地址為192.168.0.2、目標埠為80、SYN標誌位為1。電腦192.168.0.2順利接到了資料包,它馬上作出迴應,傳送一個數據包給電腦192.168.0.1。注意:這個資料包的源地址是192.168.0.2、源埠是80、目標地址192.168.0.1、目標埠為5201、SYN標誌位為1、ACK標誌位為1、這是建立TCP連線的第二次握手。電腦192.168.0.1順利接到了資料包,檢查記憶體記錄發現,這個資料包真正的收貨人是192.168.0.3:1025,於是它把這個資料包轉發給192.168.0.3。注意:這個資料包的的源地址是218.4.218.4、源埠為80、目標地址為192.168.0.3、目標埠為1025。我們要注意這個資料包在轉發後發生變化了,即源地址變了。這很重要!為什麼會變,因為在它心目當中,192.168.0.2:80早已定位給了218.4.218.4:80,對映規則使然。電腦192.168.0.3順利接到了資料包,發現期待已久的218.4.218.4:80終於有了迴音,它興奮不已的發出第三次的握手請求。注意:這個資料包的源地址是192.168.0.3、源埠是1025、目標地址是218.4.218.4、目標埠是80、ACK標誌位為1、這是建立TCP連線的第三次握手。跟前面的資料包一樣,這個資料包會從192.168.0.1那裡中轉給192.168.0.2以後192.168.0.2:80和192.168.0.3:1025之間來往通訊的資料包,全部由192.168.0.1負責中轉,“迴流”構成了

===========

[精華] NAT後無法在內網通過外部IP訪問內部服務的問題的詳細說明(原創)

http://www.chinaunix.net 作者:fushuyong  發表於:2005-05-11 09:41:20
發表評論】 【檢視原文】 【網路技術討論區】【關閉

最近,到處看到有人問這個問題,怎麼以前沒人問,現在這麼多人問呢?前兩天我還在華為的論壇上仔細的說了這個問題,現在複製到這邊來。希望能幫助大家理解這個問題。
     這是個理論問題,我們先從NAT講起:NAT有兩種基本型別,一種是SNAT(Source NAT),一種是DNAT(Dest. NAT).SNAT即源NAT是改變資料包的IP層中的源IP地址,一般是用來將不合法的IP外出請求轉換成合法的IP的外出請求,就是普通的用一個或者幾個合法IP來帶動一整個非法IP段接入。 DNAT即目的NAT,就是改變資料包的目標IP地址,使得能對資料包重新定向,可以用做負載均衡或者用於將外部的服務請求重定向到內網的非法IP的伺服器上。 
      好了,羅嗦了一通,大致就是這樣了。 那麼之所以會出現無法在DNAT的內部網路通過DNAT服務的外部IP地址來訪問的情況,是因為,如果服務從內部請求,那麼經過DNAT轉換後,將目標IP改寫成內網的IP地址,譬如172.16.10.254,而請求的機器的IP是 172.16.10.100,資料包被閘道器172.16.10.1順利的重定向到172.16.10.254的服務埠,然後,192.16.10.254根據請求傳送迴應給目的IP地址,就是172.16.10.100,但是,問題出現了,因為172.16.10.100請求的地址是外部IP 假設是221.232.34.56,所以他等待著221.232.34.56的迴應,而172.16.10.254的迴應請求被看做是非法的,被丟棄了。這就是問題的所在了。
      呵呵,寫的有點混亂,不好意思。不知道大家明白沒有.那麼如何解決這個問題,我說個用iptables實現的例子,
    #我們先把發向外網IP221.232.34.56 80號埠的資料重定向到172.16.10.254 理論上來講,如果只要從外網訪問,這就完成了。
    iptables -t nat -A PREROUTING -p tcp -d 221.232.34.56 --dport 80 -j DNAT --to-destination 172.16.10.254 
    #解決內網通過外網IP訪問的情況
    iptables -t nat -A POSTROUTING -p tcp -d 172.16.10.254 --dport 80 -j SNAT --to-source 172.16.10.1
    我們將內網的請求強行送回到閘道器172.16.10.1,依靠閘道器在核心建立的狀態表再轉發到真實的請求地址172.16.10.100.
    當然,這並不是最好的解決方法,最好的解決方法是將伺服器放在另外一個網段,也就是說所謂的DMZ(解除武裝區),這樣就不會出現上面所說的問題了。
    如果大家還不清楚,給個參考文件:
    http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET
    
     就先說到這裡了,我要去上班了。
============ 路由器迴流(埠對映特例)
迴流是什麼?最簡單的一個例項:
網咖內網一臺主機192.168.0.2建了個WEB服務站點埠80,然後在閘道器(其內網地址是192.168.0.1、公網地址為218.4.218.4)上對映80埠到192.168.0.2的80埠,這樣INTERNET上就能以http://218.4.218.4:80的地址訪問到192.168.0.2的WEB站點了。
然後出現了個問題,在同網咖的另一臺電腦192.168.0.3上,鍵入http://218.4.218.4:80,卻無法訪問該WEB站點。
就這個現象,我們就稱之為“不支援迴流”了,這裡指的是閘道器上的對映方式不支援迴流,所以說“迴流”一說,是針對對映方式而言的。

現在我們來看常規情況下,是為什麼會發生這種情況的
我以前對iptables特別感興趣的時候,曾對這個問題非常迷惑不解,直到去年為了考試,學習網路基礎的時候才搞明白這個事情

過程如下:
192.168.0.3要請求訪問218.4.218.4的80埠,根據它掌握的路由表,它本身是不知道電腦218.4.218.4在哪裡的,所以把將這個資料包傳送給它的預設路由,即電腦192.168.0.1。
注意:這個資料包的源地址是192.168.0.3、源埠假設是1025、目標地址是218.4.218.4、目標埠是80、SYN標誌位為1、這是建立TCP連線的第一次握手。

如果“把目標地址為218.4.218.4的資料包發給了192.168.0.1”你聽起來覺得有點矛盾,那麼我解釋一下:其實這個資料包的目標IP地址是218.4.218.4,目標MAC地址卻是192.168.0.1的@蒼星歸來

電腦192.168.0.1接收到了這份資料包(因為它的身份是路由器,所以允許接收和轉發目標地址不是自已、MAC地址卻是自已介面 MAC地址的資料包),它分析這個資料包的目標地址,發現這個資料包是需要中轉到電腦192.168.0.2:80去的,於是它把這個資料包轉發給了電腦 192.168.0.2:80。
注意:這個資料包的源地址是192.168.0.3、源埠是1025、目標地址為192.168.0.2、目標埠為80、SYN標誌位為1。我們要注意這個資料包在轉發後發生了變化了,即目標地址變了。
電腦192.168.0.2順利接到了資料包,它馬上作出迴應,傳送一個數據包給電腦192.168.0.3。
注意:這個資料包的源地址是192.168.0.2、源埠是80、目標地址192.168.0.3、目標埠為1025、SYN標誌位為1、ACK標誌位為1、這是建立TCP連線的第二次握手。
電腦192.168.0.3順利接到了資料包,然而它發現這是一個來自192.168.0.2:80的迴應,因為ACK標誌位值為1擺在那裡呢。它想不起來什麼時候給192.168.0.2:80這個目標物件傳送過SYN請求,它認為這是一個錯誤的資料包,於是決定把這個資料包丟棄。然後繼續等待 218.4.218.4:80的迴應,一直等到超時。
而電腦192.168.0.2這邊,它等192.168.0.3:1025的第三次握手請求包傳送過來,以便建立一個TCP的連線。同樣也沒有結果,一直等到超時。三次握手在規定的時間內沒有完成,訪問宣佈流產了。


那麼怎麼樣才能正常訪問呢?也就是說怎麼樣形成“迴流”呢?
玄機在於電腦192.168.0.1把第一次握手的那個資料包在轉發時,不僅要修改目標地址和埠,也要修改源地址和埠,我們來看一下情況會有什麼不同:
電腦192.168.0.1接收到了這份資料包(因為它的身份是路由器,所以允許接收和轉發目標IP地址不是自已、MAC地址卻是自已介面MAC地址的資料包),它分析這個資料包的目標地址,發現這個資料包是需要中轉到電腦192.168.0.2:80去的,於是它把這個資料包通過自已的5201埠轉發給了電腦192.168.0.2:80,並在記憶體裡面記錄下來了,192.168.0.1:5201已定位給了192.168.0.3:1025。
注意:這個資料包的源地址是192.168.0.1、源埠是5201、目標地址為192.168.0.2、目標埠為80、SYN標誌位為1。
電腦192.168.0.2順利接到了資料包,它馬上作出迴應,傳送一個數據包給電腦192.168.0.1。
注意:這個資料包的源地址是192.168.0.2、源埠是80、目標地址192.168.0.1、目標埠為5201、SYN標誌位為1、ACK標誌位為1、這是建立TCP連線的第二次握手。
電腦192.168.0.1順利接到了資料包,檢查記憶體記錄發現,這個資料包真正的收貨人是192.168.0.3:1025,於是它把這個資料包轉發給192.168.0.3。
注意:這個資料包的的源地址是218.4.218.4、源埠為80、目標地址為192.168.0.3、目標埠為1025。我們要注意這個資料包在轉發後發生變化了,即源地址變了。這很重要!為什麼會變,因為在它心目當中,192.168.0.2:80早已定位給了218.4.218.4:80,對映規則使然。
電腦192.168.0.3順利接到了資料包,發現期待已久的218.4.218.4:80終於有了迴音,它興奮不已的發出第三次的握手請求。
注意:這個資料包的源地址是192.168.0.3、源埠是1025、目標地址是218.4.218.4、目標埠是80、ACK標誌位為1、這是建立TCP連線的第三次握手。
跟前面的資料包一樣,這個資料包會從192.168.0.1那裡中轉給192.168.0.2

以後192.168.0.2:80和192.168.0.3:1025之間來往通訊的資料包,全部由192.168.0.1負責中轉,“迴流”構成了

相關推薦

路由器對映 公網正常訪問 區域網無法通過公網IP訪問

 問題:在NR289-E 路由器對8010埠進行對映(虛擬服務),對映到我自己的電腦的80埠,設定成功後,但在本機上(即192.168.1.80這臺PC機)訪問域名和外網ip時,都是無法開啟,還以為是對映不成功或是被路由器遮蔽了呢! 一直沒法解決,只好因vpn功能,

Tomcat在區域網中localhost可以訪問,但是無法通過本地IP訪問

轉自:https://blog.csdn.net/ybhjx/article/details/73657015 環境:Tomcat6,Windows Server2008 R2, Tomcat使用預設埠8080。 在BO伺服器上使用Tomcat6作為WEB伺服器,在伺服器本地使用http:/

Tomcat在區域網中localhost可以訪問,但是無法通過本地ip訪問,127.0.0.1也無法訪問問題的解決方法

環境:Tomcat6,Windows Server2008 R2, Tomcat使用預設埠8080。 在BO伺服器上使用Tomcat6作為WEB伺服器,在伺服器本地使用http://localhost:8080/BOE/BI可以正常訪問BOE platform平臺的登入

SSM框架整合Tomcat正常啟動,控制檯未報錯,訪問所有頁面均報404異常,總結

最近整合了ssm框架,今天想完善一下,遇到Tomcat正常啟動,控制檯也正常並未報錯,但訪問均報404異常 404異常,很常見,大多情況是路徑錯誤、web.xml檔案對映路徑寫錯、伺服器設定、servlet的jar包未導進去或者沒有隨專案釋出等等。 如果是路徑錯誤,仔細檢查即可解決問

阿里雲輕量級伺服器搭建伺服器外網無法通過公網ip訪問的解決辦法

之前用的是阿里雲伺服器ECS,這個如果外網無法訪問,可通過修改安全組 大概在控制檯>雲伺服器ECS>安全組>配置規則,當然今天要解決的不是雲服務ECS的外網訪問,而是阿里雲另外一個型別的伺服器配置,叫輕量級伺服器,是專門為學生制定的雲伺服器,如果是學生購買會很便宜(ps:阿里雲

路由器對映生效測試方案

準備兩個路由分別標記為A/B 將A的閘道器設定為192.168.132.1, B為測試埠對映並刷入測試韌體的路由,為B計算機搭建的web伺服器, 然後在B的路由後臺新增埠對映規則,接B路由的計算機

阿裏雲服務器,無法通過公網ip訪問實例

cat nbsp 檢測 tom esc 防火墻 控制臺 什麽 是否 昨天得知阿裏雲esc又打折了,趕緊入手了一波,因為以前有部署過的經驗,所以很快就部署上了項目,就在欣喜的訪問時,卻無訪問。 我按照下面步驟一步一步的檢測, 1、服務器上是否成功部署jdk和tomcat 2、

Apache 伺服器執行一段時間本地無法通過外網訪問的情況問題解決描述(轉)

轉自:http://www.52codes.net/article/338.html 最近從虛擬主機轉到了VPS之後自由了許多,但是也多了不少問題。在弄好了MySQL之後Apache又出了問題,具體表現是網站每過一定時間就無法開啟,靜態頁面也無法訪問。重啟Apache後

(辦公)mysql安裝完,只能通過localhost訪問,不能通過本機ip訪問.(轉)

pri tps color oca sql安裝 http tails pre 辦公 GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘; 這裏面*.*代表是所有庫.所有表,root是

【BUG解決】IDLE可以編譯,CMD無法通過

是括號換行的問題。 類似: print( 1 )本段程式碼,在IDLE中,可以執行。 而儲存為test.py後,在CMD中執行此語句就會報錯。 python test.py 實際上- =以上程式碼並不會報錯。 暫時我無法復現問題,因為出問題是個關係很複雜的檔案。

Tomcat的主頁可以通過IP訪問,但是無法通過localhost或者127.0.0.1訪問

      早上在公司電腦裝了tomcat,去發現只能通過本機的內網IP訪問,無法通過localhost訪問,查看了以下host檔案,發現並沒有什麼問題呀。       後來想到,公司電腦配置的是內網,通過瀏覽器訪問外網的時候需要走代理

Exchange2010 升級到 2016,2010用戶無法通過2016代理訪問郵箱,導致連接失敗。

-o anywhere out 功能 自動 hang 導致 chang chan 環境說明: 1臺AD和證書,4臺2010 前後端(NLB和DAG),2臺2016全角色。問題:當郵件流切換到2016後 原本在2010上的郵箱無法通過OUTLOOK連接,但是可以自動發現並配置

Vue-專案通過本地ip訪問

Vue專案通過本地ip訪問 1.修改package.json檔案: 將:“dev”: “webpack-dev-server --inline --progress --config build/webpack.dev.conf.js”, 替換成: “dev”: “webpack-dev

MYSQL資料庫不能通過固定ip訪問

環境 MySQL資料庫版本:5.7.20 Navicat版本:Navicat Premium 12 問題 描述如圖所示。 解決方法 1、選擇使用者。 2、選擇[email

ubuntu下Redis無法通過外網訪問

在安裝完成Redis後,測試本地是否可以訪問,如果可以訪問,按照下列步驟: 修改redis的配置檔案,將所有bind資訊全部遮蔽。 # bind 192.168.1.100 10.0.0.1

Linux使用Iptables做對映遠端訪問公網IP的SSH

主機1:  內網: 192.168.0.101 公網:202.102.1.3  //這個是瞎編的,知道是個公網IP就行了 主機2: 內網:192.168.0.102   目標:實現可以用公網的 10022埠訪問主機2的ssh服務。 #!/bi

如何通過外網訪問區域網的網站【路由器設定對映

轉載請註明出處。 原文作者:宋發元 原文連結:http://blog.csdn.net/u011019141/article/details/53709668 一直以來,在開發中我都使用花生殼對內網的地址做對映,以此達到外網訪問內網的網站資源。但是這之間經過花生殼轉發這一

Linux 下 Docker 對映到宿主機 外部無法訪問對應宿主機

問題描述 原因 解決問題 問題描述   前段時間使用 Docker 裝了 GitLab,SSH 配置都已經配置完畢,容器埠和宿主機埠也對映完畢。Firewall 和 SELinux 也已經關閉。   1、在宿主機上訪問對應的埠使用

docker設定了對映,不能訪問

#docker ps 檢視, 所有埠都 做了對映, CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

新版tplink路由器虛擬伺服器(對映)設定教程

一、虛擬伺服器作用   我覺得大家應該先了解下面的這個問題。   那就是當電腦、手機都是通過路由器連線Internet上網時;Internet上的使用者,是不能直接訪問我們電腦、手機中的資料的。     虛擬伺服器的作