你的位置:首页 > 互联网IT
Lunnel内网穿透,内网NAT穿越、反向代理软件,支持 HTTP, HTTPS, UDP, TCP、Unix socket 协议
Lunnel端口转发,端口映射
系统:Windows/linux
软件:Lunnel内网穿透
下载:Windows:lunnel0.1.6.windows-amd64.zip
Linux:lunnel0.1.6.linux-amd64.zip
项目下载:https://github.com/longXboy/lunnel/releases
项目地址:https://github.com/longXboy/lunnel
Windows配置
lunnelSer服务器端配置:
server_domain: www.baidu.com
port: 6000
aes:
secret_key: 123456789
tls:
cert: ./example.crt
key: ./example.key
启动:lunnelSer.exe -c config.yml
服务器端启动.bat
lunnelCli客户端配置:
server_addr: www.baidu.com:6000
aes:
secret_key: 123456789
tunnels:
6100:
schema: tcp
port: 6100
local: www.baidu.com:6100
tls:
trusted_cert: ./cacert-example.pem
server_name: example.com
enable_compress: true
encrypt_mode: none
启动:lunnelCli.exe -c config.yml
客户端启动.bat
服务端配置说明.txt
#服务器域名,为代理隧道自动分配公开访问地址时使用
server_domain: example.com
#指定监听的ip
ip: 127.0.0.1
#监听的端口
port: 8080
#对外提供公开访问的http端口
http_port: 80
#对外提供公开访问的https端口
https_port: 443
#http管理端口,可以用来实时查询代理隧道信息
manage_port: 8081
aes:
#aes密钥
secret_key: password
tls:
#tls公钥
cert: ./example.crt
#tls私钥
key: ./example.key
#是否开启DEBUG日志模式
debug: true
#日志地址,不填写的话则默认输出至stdout\stderr
log_file: ./client.log
health:
#心跳周期,单位秒
interval: 15
#心跳超时时间,单位秒
timeout: 40
#每个客户端的最大物理空闲连接数,不填写的话则默认为4
max_idle_pipes: 4
#单个物理连接所能承载的最大并发请求数,不填写的话则默认为6
max_streams: 6
#是否开启go profiling
pprof_enable: false
客户端配置说明.txt
#服务器地址
server_addr: 127.0.0.1:8080
tunnels:
#代理隧道的名字,必须唯一不可重复
2048:
#外网访问时使用的协议,可以是http、https、tcp、udp
schema: http
#需要客户端代理的本地连接地址
local: http://127.0.0.1:32768
#外网公开访问的地址,当服务器中已经存在相同的host,则会报错(如果不填写则由服务器端自动分配)
host: 2048.example.com
#将http request中host字段替换成该字段的值
http_host_rewrite: www.2048.com
2048_tcp:
schema: tcp
#当协议是tcp或udp时可以指定外网访问端口,如果端口已存在,则会报错
port: 33333
local: http://127.0.0.1:32768
2048_https:
schema: https
local: https://2048.example:443
2048_https_to_http:
schema: http
#当需要把本地的https转换为外网http访问时,并且本地https证书过期或非法的时候可以设置https_skip_verify为true
https_skip_verify: true
local: https://2048.example:443
docker:
schema: http
local: unix:///var/run/docker.sock
udp:
schema: udp
local: udp://127.0.0.1:32769
#底层传输的加密模式,可以是tls,aes,none,如果定义为none,则不使用任何加密
encrypt_mode: none
#tls加密的配置,如果未配置encrypt_mode则默认使用tls加密
tls:
#如果服务器使用的是自签名证书,需要配置可信任的根证书
trusted_cert: ./cacert-example.pem
#如果server_addr中填写的不是域名而是IP地址的话,必须要指定server_name,否则会握手失败
server_name: example.com
#aes加密的配置,如果未配置encrypt_mode和tls则默认使用aes加密
aes:
#aes密钥
secret_key: password
#数据传输是否启用压缩
enable_compress: true
#底层传输协议,可以是mix、tcp、kcp,如果定义为mix,则会混合使用tcp和kcp
transport: mix
#http_proxy地址,如果指定了该字段,则底层传输协议必须为tcp
http_proxy: http://127.0.0.1:8888
#是否开启客户端ID持久化,如果不开启,客户端重启的时候会丢失服务端分配的外网公开访问的地址
durable: true
#客户端ID持久化文件路径
durable_file: ./lunnel.id
#http管理端口,可以用来实时添加或修改代理隧道
manage_port: 8082
#是否开启DEBUG日志模式
debug: true
#日志地址,不填写的话则输出至STDOUT\STDERR
log_file: ./client.log
health:
#心跳周期,单位秒
interval: 15
#心跳超时时间,单位秒
timeout: 40
Lunnel
lunnel 是一款简单易用的内网NAT穿越、反向代理软件,支持 HTTP, HTTPS, UDP, TCP、Unix socket 协议。
Feature
隧道连接默认使用 TCP、KCP 自动切换模式,隧道传输协议可以任意替换。
支持 AES、TLS 加密,客户端与服务器端建立隧道只需一次密钥交换握手,建立连接速度更快。
自建隧道连接池,保证高并发下的访问通畅。
单个连接支持多路并发(类似http 2.0),更节省资源。
QuickStart
为 docker daemon 配置 HTTP API 访问
修改服务端配置:
server_domain: example.comport: 8080aes: secret_key: passwordtls: cert: ./example.crt
key: ./example.key
在公网启动服务端程序:
sudo ./lunnelSer -c ./config.yml
修改客户端配置并保存:
server_addr: <your_server_ip>:8080tunnels: docker: schema: http
local: unix:///var/run/docker.sock
host: docker.exmpale.comaes: secret_key: passwordenable_compress: true
在本地启动客户端程序:
./lunnelCli -c ./config.yml
在浏览器中访问 docker.example.com 即可通过 http api 来控制 docker
为 2048 小程序反向代理
使用上一例中服务端的配置并启动服务端程序:
sudo ./lunnelSer -c ./config.yml
使用 docker 启动 2048 程序,并运行在本地 32768 端口:
docker run -d -p 32768:80 daocloud.io/sakeven/2048
修改客户端配置并保存:
server_addr: <your_server_ip>:8080tunnels: 2048: schema: http
local: http://127.0.0.1:32768
http_host_rewrite: www.2408.comtls: trusted_cert: ./cacert-example.pemserver_name: example.com
在本地启动客户端程序:
./lunnelCli -c ./config.yml
通过观察客户端日志,找到外网公开访问地址后在浏览器中访问(因为本例没有为该代理隧道指定 host,所以由服务端分配远程公开访问地址)
Q&A
Q: 在示例配置中客户端使用的是 TLS 加密方式,需要 CA 签发的 SSL 证书,如果没有的话怎么办?
A: 可以使用 OpenSSL 自签名证书,请参考:基于 OpenSSL 自建 CA 和颁发 SSL 证书、OpenSSL 生成 SSL 证书;
或者您也可以在客户端以及服务端配置文件中指定aes.secret_key
从而使用 aes 加密。
Q: 启动程序的时候为何报错
found character that cannot start any token
?
A: YAML 格式的配置文件每一行的开头不允许出现 tab 字符,请将所有的 tab 换成空格。
Config Reference
TODO
持久化客户端获得的远公开访问地址,不再因为暂时失联而重新分配公开访问地址
使用 HTTP API 实时修改客户端的代理隧道支持,不需要重启客户端
优化隧道连接池算法
底层传输协议支持 QUIC
提供 Dashboard 管理界面,开放 HTTP 接口
集成raft一致性协议,服务端可横向伸缩扩展
发表评论: