搭建lanproxy客户端与服务端实现内网穿透

一、首先要配置java环境
1.可以使用这个,或者官网下载,或者其他版本皆可。https://download.csdn.net/download/qq_44821149/87878658

2.采用jdk-8u144-linux-x64.zip压缩包。java version 为1.8.0_144。

3.具体操作为:

mkdir /usr/java
unzip -d /usr/java/ jdk-8u144-linux-x64.zip
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile
echo $PATH
java -version

(没权限的可以赋权限:chmod -R +x jdk1.8.0_144/)

4.发现一个有趣点,就是在/etc/profile导入环境变量后,加载该文件。
echo $PATH,然后再加载文件,再echo $PATH。发现这个路径一直重复叠加。但是关了终端,再开个终端,再打印发现正常了,没有叠加。

二、配置lanproxy服务端(目录可以根据自己需要而定。)
1.下载lanproxy服务端压缩包,再传到服务器上。
https://download.csdn.net/download/qq_44821149/87878685

2.解压压缩包

unzip -d /mydata  proxy-server-20171116.zip

3.配置lanproxy服务端

cd /mydata/proxy-server-20171116/conf/
vim config.properties

下为config.properties配置文件内容:

#这个是哪些客户端主机可以使用本服务端的穿透服务
server.bind=0.0.0.0
#这个是穿透时服务端的端口(自己选择)
server.port=6666

#这一块不配ssl的可以不用管。
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

#这个是哪些主机可以访问本lanproxy服务端的web界面
config.server.bind=0.0.0.0
#这个是lanproxy服务端的web界面的端口
config.server.port=xxxx
#这个是web界面登录账号和密码
config.admin.username=admin
config.admin.password=xxxxxxxxxx

三、为lanproxy服务端所在的云服务器开放所需端口:
腾讯云-总览-我的资源-云服务器-选择lanproxy服务端所在服务器-安全组-然后去添加所需开放的端口即可。
来源填:0.0.0.0/0 ,表示任何ip的主机都可以访问本服务器的该端口。
协议端口填:TCP:6666,表示开放6666端口。
如果是 多端口则填: TCP:9000-10000 ,表示对外开放9000到10000的端口。

四、配置lanproxy客户端(目录可以根据自己需要而定。)
1.下载lanproxy客户端压缩包,再传到服务器上。
https://download.csdn.net/download/qq_44821149/87881174

2.解压压缩包

unzip -d /mydata  lanproxy-java-client-20171116.zip 

3.配置lanproxy客户端

cd /mydata/lanproxy-java-client-20171116/conf/
vim config.properties

下为config.properties配置文件内容:

#在服务端web界面,生成一个随机key来绑定客户端
client.key=xxxxxxxxxxxxxxxxxxx

#这一块不配ssl的可以不用管。
ssl.enable=false
ssl.jksPath=test.jks
ssl.keyStorePassword=123456

#lanproxy服务端所在的云服务器的地址(如果服务端客户端在同一台服务器就填127.0.0.1,在一个局域网可以填局域网ip,都不是则填lanproxy服务端云服务器的公网ip。)
server.host=xxx.xxx.xxx.xxx
#lanproxy服务端所在的云服务器的端口(跟lanproxy服务端一致)
server.port=6666

五、lanproxy服务端web界面操作。
1.添加客户端,生成客户端密钥,该密钥填写在lanproxy客户端配置文件client.key里。
在这里插入图片描述
2.配置客户端的端口穿透:
配置后就可以使用 lanproxy服务端公网ip+配置的公网端口 来访问 该lanproxy客户端配置的 后端ip端口。
在这里插入图片描述
3.lanproxy场景分析。

场景一: 公司本地有一台Linux服务器,我在外地办公,需要使用该Linux服务器。

方案:在云服务器配置lanproxy服务端,在公司linux服务器配置lanproxy客户端,然后在lanproxy服务端的web界面进行设置:
设置-代理名称为:公司服务器ssh
设置公网端口为:xxxx(云服务器对外开放端口中选择)
设置后端IP端口为: 127.0.0.1:22
后续就可以使用: 云服务器公网IP+设置的公网端口 来ssh远程控制公司的Linux服务器了。(同理,也可以穿透3306端口,以便可以在外网访问公司内网的mysql。)

场景二: 公司在的数据库在云服务器上,但是为了安全着想,mysql的服务器没有公网ip,外网设备都不能直连mysql服务器。那该如何,在外网访问mysql云服务器。

方案:在有公网IP的云服务器配置lanproxy服务端,同时在该云服务器配置lanproxy客户端,然后在lanproxy服务端的web界面进行设置:
设置-代理名称为:云mysql
设置公网端口为:xxxx(云服务器对外开放端口中选择)
设置后端IP端口为: 10.xxx.xxx.xxx:3306 (这个是mysql云服务器在所在服务器集群的内网IP)
后续就可以使用: 云服务器公网IP+设置的公网端口 来访问没有公网IP的mysql云服务器了。

六、后续发现

  • 发现同一台机器可以开两个lanproxy客户端,复制两份lanproxy目录文件即可。这样的话,就可以把一个服务开两个或更多穿透,采用多通道,防止单个网关失效时引起的服务故障。
  • lanproxy服务端配置占用的端口即使该条记录被删除后仍然会一直占用,重启lanproxy服务端释放被删除记录却仍占用的端口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GatewayWorker 是一款基于PHP语言开发的高性能的TCP长连接框架,可以通过它来实现高并发的网络应用。而ThinkPHP是一款流行的PHP开发框架,提供了丰富的功能,包括MVC架构、ORM、模板引擎等等。 下面介绍如何使用ThinkPHP搭建GatewayWorker TCP客户端服务端。 ### 环境准备 - PHP 5.3以上版本(推荐PHP7) - GatewayWorker 3.0以上版本 - ThinkPHP 5.0以上版本 ### 客户端实现 在ThinkPHP的控制器中,我们可以使用GatewayClient类来实现对GatewayWorker服务端的连接和通信。以下是一个简单的示例: ```php use GatewayClient\Gateway; class IndexController extends \think\Controller { public function index() { Gateway::$registerAddress = '127.0.0.1:1238'; $client_id = Gateway::getClientIdByUid(1); Gateway::sendToClient($client_id, 'hello world'); } } ``` 在上面的代码中,我们首先设置了GatewayWorker服务端的注册地址,然后通过getClientIdByUid方法来获取客户端的连接ID,最后通过sendToClient方法向客户端发送消息。 ### 服务端实现 在ThinkPHP的控制器中,我们可以使用GatewayWorker的Gateway类来实现TCP服务端搭建和消息处理。以下是一个简单的示例: ```php use GatewayWorker\Gateway; class Test extends \think\Controller { public function index() { $gateway = new Gateway("websocket://0.0.0.0:7272"); $gateway->name = 'MyWebsocketGateway'; $gateway->count = 4; $gateway->onConnect = function($connection){ echo "new client connected\n"; }; $gateway->onMessage = function($connection, $data){ $connection->send('hello ' . $data); }; $gateway->onClose = function($connection){ echo "client closed\n"; }; $gateway->start(); } } ``` 在上面的代码中,我们首先创建了一个Gateway实例,并设置了监听地址和端口、名称、进程数等参数。然后我们定义了三个回调函数:onConnect、onMessage和onClose,分别处理客户端连接、消息接收和连接关闭的事件。最后我们调用start方法启动服务端。 ### 总结 本文介绍了如何使用ThinkPHP搭建GatewayWorker TCP客户端服务端。通过这种方式,我们可以很方便地实现高并发的网络应用。当然,GatewayWorker还提供了很多其他的功能,例如支持WebSocket协议、支持分布式部署等等。如果您想深入了解GatewayWorker的使用,可以参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

confined.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值