在很多場景下內網穿透都是我們常常遇到的需求,之前也用過花生殼、ngrok、FRP 等等一些工具,但是由于限速、收費、安全各方面因素只好放棄了,
近期無意間看到 「傳送門:lanproxy」 這款開源工具,正好剛免費購置了一臺華為云主機服務器,正好可以實作內網穿透,
一、概述
1、什么是內網穿透服務
內網穿透,即NAT穿透,網路連接時術語,計算機是局域網內時,外網與內網的計算機節點需要連接通信,有時就會出現不支持內網穿透,
2、什么是lanproxy
lanproxy 是一個將局域網個人電腦、服務器代理到公網的內網穿透工具,目前僅支持 tcp 流量轉發,可支持任何 tcp 上層協議(訪問內網網站、本地支付介面除錯、ssh 訪問、遠程桌面…),目前市面上提供類似服務的有花生殼、TeamView、GoToMyCloud 等等,但要使用第三方的公網服務器就必須為第三方付費,并且這些服務都有各種各樣的限制,此外,由于資料包會流經第三方,因此對資料安全也是一大隱患,https://lanproxy.io2c.com
3、內網穿透原理
內網穿透的原理如下圖所示:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gCHdOBVS-1617254316954)(./210401-113813.png)]](https://img.uj5u.com/2021/04/02/232756021630351.png)
- 用戶訪問我們的服務器,這個服務器是有公網IP的,所以用戶可以無壓力訪問
- 服務器與本地電腦保持長鏈接,當有請求的時候,服務器將請求轉發到我們的本地電腦
- 本地電腦將回應回復給服務器
- 服務器將回應回復給用戶
二、開始部署
1、準備環境
| 主機 | IP | 角色 | OS | 服務 |
|---|---|---|---|---|
| internet-yanmb | 外網IP | 云服務器 | centos 7.6 | docker(簡化更多的配置,這里采用 docker 容器進行搭建); Nginx 環境 |
| didi | 內網IP | 內網PC | centos 7.6 | Java JDK 1.8 Maven(包依賴管理工具) |
2、公網服務器配置(docker)
2.1 基礎環境部署docker、nginx
1、安裝依賴包
[root@internet-yanmb ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2、安裝
[root@internet-yanmb ~]# yum install docker nginx
3、啟動doker、nginx
[root@internet-yanmb ~]# systemctl start docker && systemctl enable docker
[root@internet-yanmb ~]# systemctl start nginx && systemctl enable nginx
2.2 通過 Docker,啟動 lanproxy 服務
[root@internet-yanmb ~]# docker run -d --name lanproxy-server -p 8090:8090 -p 4900:4900 -p 4993:4993 -p 9000-9100:9000-9100 --restart=always biodwhu/lanproxy
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-t4dX4cyz-1617254316970)(./210401-120810.png)]](https://img.uj5u.com/2021/04/02/232756021630352.png)
2.3 輸入你的公網服務器 IP:8090
默認 密碼 admin/admin
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qUG7MiHj-1617254316972)(./210401-121109.png)]](https://img.uj5u.com/2021/04/02/232756021630353.png)
2.4 Nginx 反向代理配置域名 (可選)
在上一步,我們通過 docker 啟動了一個 lanproxy 環境,但是只能通過IP地址來訪問,配置Nginx反向代理只是起到域名訪問功能,
vim /etc/nginx/conf.d/lanproxy.didi.cn.conf
server {
listen 80;
# 這里使用自己的域名
server_name lanproxy.didi.com;
charset utf-8;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
# 這里根據你的 lanproxy 配置,改成 config.server.port的值
proxy_pass http://127.0.0.1:8090;
client_max_body_size 35m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
配置內網服務代理
vim etc/nginx/conf.d/kodcloud.didi.cn.conf
server {
listen 80;
# 這里使用自己的域名
server_name kodcloud.didi.cn;
charset utf-8;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
# 這里根據你的lanproxy配置,改成 外網介面 的值,在lanproxy后臺網頁上配置,后面配置
proxy_pass http://127.0.0.1:9000;
client_max_body_size 35m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
127.0.0.1:port 這些埠都可以使用
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1srFf7pE-1617254316976)(./210401-123147.png)]](https://img.uj5u.com/2021/04/02/232756021630354.png)
重啟Nginx
systemctl restart nginx
2.5 繼續配置 lanproxy 后臺服務
配置一個客戶端
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3Dm9Xdkg-1617254316977)(./210401-122610.png)]](https://img.uj5u.com/2021/04/02/232756021630355.png)
添加配置
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jJe0ltxe-1617254316979)(./210401-123527.png)]](https://img.uj5u.com/2021/04/02/232756021630356.png)
3、內網PC配置(Java 客戶端)
3.1 安裝jdk1.8環境
# jdk下載地址
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
tar -zxvf jdk-8u281-linux-x64.tar.gz -C /usr/local/
# 配置環境變數
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_281/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 執行命令使修改立即生效
source /etc/profile
# 驗證
java -version
# 配置軟連接
update-alternatives --install /usr/bin/java java /usr/local/jdk1.8.0_181/java 300
update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.8.0_181/bin/javac 300
3.2 安裝maven 環境
http://maven.apache.org/download.cgi 下載maven,
# 下載maven
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
# 解壓到/opt/maven 目錄
mkdir /opt/maven
tar zxvf apache-maven-3.6.0-bin.tar.gz -C /opt/maven
# 配置maven 配置環境變數
vim /etc/profile
export M2_HOME=/opt/maven/apache-maven-3.6.3
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin
# 執行命令使修改立即生效
source /etc/profile
# 驗證
mvn -v
# 修改 maven 源為阿里云,以及倉庫默認存放路徑,這樣 maven 下載 jar 包的速度會快很多,添加如下引數
<localRepository>maven/reposity</localRepository>
----------------------------------------------------
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
----------------------------------------------------
vim /opt/maven/apache-maven-3.6.3/conf/settings.xml
在這里插入代碼片![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WBoVPTAV-1617254316982)(./210401-124920.png)]](https://img.uj5u.com/2021/04/02/232756021630357.png)

驗證內網服務真實有效

3.3 運行 lanproxy client 服務
# 克隆到內網電腦
mkdir /appstorage/ && cd /appstorage
git clone https://github.com/ffay/lanproxy.git lanproxy
# 打包
cd lanproxy
mvn package
打包完成之后,客戶端檔案會出現在 distribution/proxy-client-0.1 目錄下,打開之后有是個檔案夾:bin、conf、lib和log,配置資訊在 conf/config.properties 檔案內,根據前面服務端的配置資訊修改一下,
vim distribution/proxy-client-0.1/conf/config.properties
# 這里是在lanproxy后臺配置的密鑰
client.key=ca670d0e95fb4ad68626d174ed357efe
# 配置ssl資訊,根據服務端的配置填寫(enable = false 就不需要配置)
ssl.enable=false
ssl.jksPath=test.jks
ssl.keyStorePassword=123456
# 服務器的ip
server.host=123.60.x.x
#proxy-server ssl默認埠4993,默認普通埠4900
#ssl.enable=true時這里填寫ssl埠,ssl.enable=false時這里填寫普通埠
server.port=4900
客戶端啟動
cd distribution/proxy-client-0.1/conf
bash bin/startup.sh
# 設定開機自啟動
echo "/usr/bin/bash bin/startup.sh" >> /etc/rc.local
chmod a+x /etc/rc.d/rc.local
4、客戶端測驗訪問
本地host決議 kodcloud.didi.cn

成功
也可以通過IP地址訪問
公網IP:9000

5、內網穿透PC的22埠
5.1 進入jupyter 添加代理規則,訪問公網IP:埠
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LvX3BbOc-1617254316989)(./210401-131437.png)]](https://img.uj5u.com/2021/04/02/2327560216303512.png)
5.2 驗證
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Hd3zWSJt-1617254316990)(./210401-131728.png)]](https://img.uj5u.com/2021/04/02/2327560216303513.png)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271652.html
標籤:其他
