內(nèi)網(wǎng)映射方案(lanproxy)

現(xiàn)狀

現(xiàn)在運(yùn)營商提供的寬帶服務(wù),無論是動態(tài)IP,還是固定IP,默認(rèn)都是禁止所有端口服務(wù)的(目前了解上海是這樣的),在路由器上配置的端口映射和DMZ都失效。申請開通端口需要域名備案,過程比較繁瑣。
運(yùn)營商這么做是為了防止個人隨意開設(shè)各種非法服務(wù),也防止黑客通過掃描器進(jìn)行抓雞和批量掃描。這樣封禁,雖然一定程度上保證了我們的網(wǎng)絡(luò)安全,比如說前段時間的勒索病毒正因為國內(nèi)大部分用戶沒有獨(dú)立的公網(wǎng)IP,并且操作系統(tǒng)最容易爆發(fā)漏洞的一些,135,139等端口被運(yùn)營商封禁了,使得國內(nèi)個人家庭電腦中招的概率小了很多;但是導(dǎo)致即使有公網(wǎng)IP,也無法使用常用端口向外網(wǎng)提供服務(wù)。

解決方案

通過NAPT原理得知:NAPT實現(xiàn)了內(nèi)網(wǎng)主機(jī)在沒有公網(wǎng)IP的情況下訪問公網(wǎng)主機(jī)。
那么我們可以這樣做:假設(shè)公網(wǎng)IP為23.23.23.23,內(nèi)網(wǎng)IP為192.168.1.2。
公網(wǎng)主機(jī)先監(jiān)聽80端口,監(jiān)聽這個端口是用于向外部提供一個HTTP服務(wù),80是WEB服務(wù)器的默認(rèn)端口。同時其他任意一個端口(這里我們假設(shè)為7777),監(jiān)聽這個端口是用于讓內(nèi)網(wǎng)服務(wù)器主動連接進(jìn)來打通一個隧道。接著內(nèi)網(wǎng)再主動向公網(wǎng)主機(jī)的7777發(fā)起一個請求,這樣內(nèi)網(wǎng)就成功與公網(wǎng)主機(jī)建立了一個連接通道。

然后當(dāng)有任何客戶端主動連接公網(wǎng)的80端口時,公網(wǎng)接收到連接請求之后馬上把這連接請求通過先前建立好的隧道轉(zhuǎn)發(fā)到內(nèi)網(wǎng)主機(jī),內(nèi)網(wǎng)主機(jī)接收到來自隧道的數(shù)據(jù)包后再主動連接內(nèi)網(wǎng)主機(jī)自身的80端口,連接成功之后將數(shù)據(jù)包原封不動地轉(zhuǎn)發(fā)數(shù)據(jù)包給80端口,待HTTP服務(wù)器程序處理完這個數(shù)據(jù)包,生成了響應(yīng)報文之后再原路轉(zhuǎn)發(fā)回去,最終到達(dá)公網(wǎng)的80端口,然后返回給最開始請求公網(wǎng)服務(wù)器80端口的客戶端。


image

大名鼎鼎的花生殼內(nèi)網(wǎng)版以及nat123等內(nèi)網(wǎng)穿透工具的原理基本就是如此。

https://juejin.im/entry/59f2ed94518825098951554c

lanproxy

lanproxy是一個將局域網(wǎng)個人電腦、服務(wù)器代理到公網(wǎng)的內(nèi)網(wǎng)穿透工具,目前僅支持tcp流量轉(zhuǎn)發(fā),可支持任何tcp上層協(xié)議(訪問內(nèi)網(wǎng)網(wǎng)站、本地支付接口調(diào)試、ssh訪問、遠(yuǎn)程桌面...)。目前市面上提供類似服務(wù)的有花生殼、TeamViewer、GoToMyCloud等等,但要使用第三方的公網(wǎng)服務(wù)器就必須為第三方付費(fèi),并且這些服務(wù)都有各種各樣的限制,此外,由于數(shù)據(jù)包會流經(jīng)第三方,因此對數(shù)據(jù)安全也是一大隱患。

1,服務(wù)器配置

服務(wù)器如騰訊云服務(wù)器、阿里云服務(wù)器,必須有獨(dú)立IP。
下載lanproxy-server-20171116.zip,解壓后放到服務(wù)器上。
server的配置文件放置在conf目錄中,配置 config.properties

server.bind=0.0.0.0

#與代理客戶端通信端口
server.port=4900

#ssl相關(guān)配置
server.ssl.enable=true
server.ssl.bind=0.0.0.0
server.ssl.port=4993
server.ssl.jksPath=test.jks
server.ssl.keyStorePassword=123456
server.ssl.keyManagerPassword=123456

#這個配置可以忽略
server.ssl.needsClientAuth=false

#WEB在線配置管理相關(guān)信息
config.server.bind=0.0.0.0
config.server.port=8090
config.admin.username=admin
config.admin.password=admin

代理配置,打開地址 http://ip:8090 ,使用上面配置中配置的用戶名密碼登錄

image

添加客戶端:


image

配置客戶端:


image

示例是將公網(wǎng)的80、443端口映射到內(nèi)網(wǎng)主機(jī)的80、443端口。

2,Java客戶端配置

Java client的配置文件放置在conf目錄中,配置 config.properties

#與在proxy-server配置后臺創(chuàng)建客戶端時填寫的秘鑰保持一致;
client.key=
ssl.enable=true
ssl.jksPath=test.jks
ssl.keyStorePassword=123456

#這里填寫實際的proxy-server地址;沒有服務(wù)器默認(rèn)即可,自己有服務(wù)器的更換為自己的proxy-server(IP)地址
server.host=lp.thingsglobal.org

#proxy-server ssl默認(rèn)端口4993,默認(rèn)普通端口4900
#ssl.enable=true時這里填寫ssl端口,ssl.enable=false時這里填寫普通端口
server.port=4993

java客戶端需要以下環(huán)境:

  • 安裝java1.7或以上環(huán)境
  • linux(mac)環(huán)境中運(yùn)行bin目錄下的 startup.sh
  • windows環(huán)境中運(yùn)行bin目錄下的 startup.bat

3,其他平臺客戶端

不用java客戶端的可以使用下面提供的各個平臺的客戶端,省去安裝java運(yùn)行環(huán)境

源碼地址
https://github.com/ffay/lanproxy-go-client

發(fā)布包
https://github.com/ffay/lanproxy-go-client/releases

普通端口連接

# mac 64位
nohup ./client_darwin_amd64 -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY &

# linux 64位
nohup ./client_linux_amd64 -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY &

# windows 64 位
./client_windows_amd64.exe -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY

SSL端口連接

# mac 64位
nohup ./client_darwin_amd64 -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true &

# linux 64位
nohup ./client_linux_amd64 -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true &

# windows 64 位
./client_windows_amd64.exe -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true

實測

image

查看管理后臺的數(shù)據(jù)統(tǒng)計,有訪問流量,說明轉(zhuǎn)發(fā)成功!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容