在很多场景下内网穿透都是我们常常遇到的需求,之前也用过花生壳、ngrok、FRP 等等一些工具,但是由于限速、收费、安全各方面因素只好放弃了。

近期无意间看到 「传送门:lanproxy」 这款开源工具,正好刚免费购置了一台华为云主机服务器,正好可以实现内网穿透。

一、概述

1、什么是内网穿透服务

内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。

2、什么是lanproxy

lanproxy 是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持 tcp 流量转发,可支持任何 tcp 上层协议(访问内网网站、本地支付接口调试、ssh 访问、远程桌面…)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud 等等,但要使用第三方的公网服务器就必须为第三方付费,并且这些服务都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。https://lanproxy.io2c.com

3、内网穿透原理

内网穿透的原理如下图所示:

  1. 用户访问我们的服务器,这个服务器是有公网IP的,所以用户可以无压力访问
  2. 服务器与本地电脑保持长链接,当有请求的时候,服务器将请求转发到我们的本地电脑
  3. 本地电脑将响应回复给服务器
  4. 服务器将响应回复给用户

二、开始部署

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

2.3 输入你的公网服务器 IP:8090

默认 密码 admin/admin

##

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 这些端口都可以使用

重启Nginx

systemctl restart nginx

2.5 继续配置 lanproxy 后台服务

配置一个客户端

添加配置

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

在这里插入代码片


验证内网服务真实有效

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:端口

5.2 验证

CentOS 7.6 内网穿透服务lanproxy部署的更多相关文章

  1. QuantumTunnel:内网穿透服务设计

    背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...

  2. frp + nginx 配置多人共用的http 内网穿透服务

    来源:简书   https://www.jianshu.com/p/c9d7527d607b 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp ...

  3. 四、frp内网穿透服务端frps.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]服务器IPbind_addr = 0.0.0.00.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中 ...

  4. 手写内网穿透服务端客户端(NAT穿透)原理及实现

    Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...

  5. natapp 内网穿透服务

    参考文章:https://www.jianshu.com/p/91a321e584b8 参考文章:https://www.jianshu.com/p/c4cb8666c96a 一.什么是内网穿透 通过 ...

  6. Natapp内网穿透服务工具

    在做微信开发的时候,调用微信接口成功之后,微信会回调我们事先配置好的一个接口.由于微信的服务是在外网的,所以这个回调接口也只能是外网,而且微信要求回调接口只能是通过ICP备案的域名,不能使用IP,所以 ...

  7. 免费内网穿透服务Localtunnel

    Localtunnel 将为您分配一个唯一的可公开访问的 url,它将所有请求代理到您本地运行的网络服务器. 快速开始 全局安装 Localtunnel(需要 NodeJS)以使其在任何地方都可以访问 ...

  8. 【python + NATAPP】实现内网穿透的简易数据传输

    1. 服务端 接收两张图像的地址,返回这两张图像的相似度 import os, shutil, requests import cv2 import numpy as np import imgs_s ...

  9. nodejs内网穿透

    说明 本地服务注册,基于子域名->端口映射.公网测试请开启二级或三级域名泛解析 无心跳保活.无多线程并发处理 服务器端 请求ID基于全局变量,不支持PM2多进程开服务端.(多开请修改uid函数, ...

  10. 五、frp内网穿透客户端frpc.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...

随机推荐

  1. 【转载】网络协议之:sctp流控制传输协议

    原文地址: https://www.cnblogs.com/flydean/p/16277006.html ============================================== ...

  2. 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编译C++扩展模块!!!

    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和 ...

  3. Windows 修改本地hosts文件

    在在使用win下面的一些php集成开发工具的时候(比如 phpstudy wampserver等) 有时候会有这样的需求:我不想通过localhost/xxx/xxx/xxx.php 这样的方式访问我 ...

  4. 面试官:说说MySQL调优?

    MySQL 作为关系型数据库的典型代表,其流行程度超越于任何数据库,因此在 Java 面试中,MySQL 是一定会被问到的重要知识点.而在 MySQL 中有一道极其常见的面试题,我们这里系统的来看一下 ...

  5. Aspire8一文通

    Aspire8一文通 0.简介 微软Aspire是微软今年推出的一个全新的平台无关.语言无关的新框架,它的设计目的是简化云原生应用的开发.部署和管理过程.Aspire的读音是[əˈspaɪər],它的 ...

  6. 【全】CSS动画大全之其他【火影忍者动态背景】

    效果预览 代码 <!DOCTYPE html> <html> <head> <head> <meta charset="utf-8&qu ...

  7. Win32_GDI_绘制文字路径透明窗口

    效果图: 前面字体是个透明窗口 后面是桌面背景 代码实现: void MyMainDialog::TextPathWindow(LPCTSTR lpShowText) { HDC hdc = GetD ...

  8. java_父类子类

    private 只有自身能访问自身 自身 同包子 不同包子类 同包类 其他类 可以访问 不能继承 不能继承 不能访问 不能访问 package/friendly/default == 不写 自身 同包 ...

  9. 万丈高楼平地起:UML类图

    UML类图 UML类图 是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解.UML类图 是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型. 图示 类 ...

  10. HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容

    背景 随着消费电子产品和移动互联网的普及,未成年人互联网普及率96.8%,超过80%的未成年人都拥有自己的上网设备,而如何引导孩子正确上网一直是家长们的担忧.市场上很多电子设备.系统推出了一些未成年人 ...