你的位置:首页 > 互联网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

QQ截图20210330004903.jpg Lunnel内网穿透,内网NAT穿越、反向代理软件,支持 HTTP, HTTPS, UDP, TCP、Unix socket 协议 互联网IT

Lunnel

lunnel 是一款简单易用的内网NAT穿越、反向代理软件,支持 HTTP, HTTPS, UDP, TCP、Unix socket 协议。

Feature

  1. 隧道连接默认使用 TCP、KCP 自动切换模式,隧道传输协议可以任意替换。

  2. 支持 AES、TLS 加密,客户端与服务器端建立隧道只需一次密钥交换握手,建立连接速度更快。

  3. 自建隧道连接池,保证高并发下的访问通畅。

  4. 单个连接支持多路并发(类似http 2.0),更节省资源。

QuickStart

为 docker daemon 配置 HTTP API 访问

  1. 修改服务端配置:

server_domain: example.comport: 8080aes:  secret_key: passwordtls:  cert: ./example.crt
  key: ./example.key
  1. 在公网启动服务端程序:sudo ./lunnelSer -c ./config.yml

  2. 修改客户端配置并保存:

server_addr: <your_server_ip>:8080tunnels:  docker:    schema: http
    local: unix:///var/run/docker.sock
    host: docker.exmpale.comaes:  secret_key: passwordenable_compress: true
  1. 在本地启动客户端程序:./lunnelCli -c ./config.yml

  2. 在浏览器中访问 docker.example.com 即可通过 http api 来控制 docker

为 2048 小程序反向代理

  1. 使用上一例中服务端的配置并启动服务端程序:sudo ./lunnelSer -c ./config.yml

  2. 使用 docker 启动 2048 程序,并运行在本地 32768 端口:docker run -d -p 32768:80 daocloud.io/sakeven/2048

  3. 修改客户端配置并保存:

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
  1. 在本地启动客户端程序:./lunnelCli -c ./config.yml

  2. 通过观察客户端日志,找到外网公开访问地址后在浏览器中访问(因为本例没有为该代理隧道指定 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一致性协议,服务端可横向伸缩扩展




  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。