内网穿透这事,大家都不陌生:假如你想在公司里访问家里的电脑,只需要通过内网穿透技术,把家里电脑映射到一个公网电脑上即可:
要实现内网穿透,有好多的软件可以选择,例如大名鼎鼎的FRP。
但是今天要介绍的这个软件就是个奇葩了,它的介绍是:只要两台机器间有任何通讯渠道(如http短连接、websocket、tcp,甚至kafka之类的消息队列),就能让两台机器间任意端口互通!
项目地址:https://github.com/codingmiao/hppt
是的你没看错,kafka也能拿来当通信渠道:
如图所示,A、B两台机器间无法进行通信,但他们都可以访问到机器C上的kafka,我们在kafka中做两个topic供客户端发送/消费数据,使得A能够以C上的kafka作为桥梁访问到B上的SSH端口!
操作步骤:
1、确保你的电脑上有jdk21或更高版本,没有的话去官网下载一个
https://jdk.java.net/archive/
和本地jdk版本冲突的话不用配置环境变量也行,运行时敲jdk21/bin目录的绝对路径即可。
2、本项目的releases页面下载最新的包:
https://github.com/codingmiao/hppt/releases
下载完解压是这样的:
修改一下配置文件
ss.yml:
# 通讯协议 客户端与服务端保持一致 type: 'org.wowtools.hppt.addons.kafka.KafkaServerSessionService' # 允许的客户端账号和密码 clients: - user: user1 password: 12345
sc.yml
type: 'org.wowtools.hppt.addons.kafka.KafkaClientSessionService' # 客户端用户名 clientUser: user1 # 客户端密码 clientPassword: 12345 #这里添加或修改想映射的端口号 forwards: - localPort: 10022 remoteHost: "127.0.0.1" remotePort: 22
addons/config-kafka.yml
clientSendTopic: "client-send"
serverSendTopic: "server-send"
tag: xx
properties:
#kafka配置
"key.serializer": "org.apache.kafka.common.serialization.StringSerializer"
"value.serializer": "org.apache.kafka.common.serialization.ByteArraySerializer"
"key.deserializer": "org.apache.kafka.common.serialization.StringDeserializer"
"value.deserializer": "org.apache.kafka.common.serialization.ByteArrayDeserializer"
#kafka地址
"bootstrap.servers": "192.168.1.11:9092"
#kafka没有密码的话下面这三行删掉即可
"sasl.jaas.config": 'org.apache.kafka.common.security.scram.ScramLoginModule required username="xxx" password="xxx";'
"security.protocol": "SASL_PLAINTEXT"
"sasl.mechanism": "SCRAM-SHA-512"
然后,把文件夹分别拷贝到A B两台电脑
B(家里的台式机) 执行
A(公司的笔记本)执行
随后,你就可以在公司用linux连接工具访问localhost的10022端口,来登录家里的台式机了,神奇吧