支持TCP、HTTP、HTTPS穿透。
0x01 文件说明
服务器端文件
lts.exe
服务器端windows可执行文件
lts.sh
服务器端*nix可执行文件
lts.jar
服务器端jvm可执行文件
lts.ini
服务器端最小配置文件
lts_full.ini
服务器端完整配置文件
lts.jks
服务器端SSL证书
客户端文件
ltc.exe
客户端windows可执行文件
ltc.sh
客户端*nix可执行文件
ltc.jar
客户端jvm可执行文件
ltc.ini
客户端最小配置文件
ltc_full.ini
客户端完整配置文件
ltc.jks
客户端SSL证书
0x02 启动命令
windows系统
服务器端
.\lts.exe -c lts.ini
客户端
.\ltc.exe -c ltc.ini
*nix系统
服务器端
./lts.sh -c lts.ini
客户端
./ltc.sh -c ltc.ini
jvm
服务器端
java -jar lts.jar -c lts.ini
客户端
java -jar ltc.jar -c ltc.ini
0x03 配置文件
服务器端完整配置参考
[basic]
# 线程数,值为-1时不限制线程数量
boss_threads = -1
worker_threads = -1
# 绑定IP地址
bind_addr = 0.0.0.0
# 绑定端口号
bind_port = 5080
# 验证Token
auth_token = tk123456
# TCP隧道允许使用的端口
allow_ports = 10000,10001,10002-50000
# tunnel by ssl
# ssl绑定端口号,为空时不启用http服务
ssl_bind_port = 5443
# ssl jks证书文件,加载失败时会默认使用程序内建的证书
ssl_jks = lts.jks
ssl_key_password = ltspass
ssl_store_password = ltspass
# Http和Https共用Registry
http_https_share_registry = true
# tunnel by http
# http服务绑定端口,为空时不启用http服务
http_port = 8080
# tunnel by https
# https服务绑定端口,为空时不启用https服务
https_port = 8443
# https jks证书文件,加载失败时会默认使用程序内建的证书
https_jks = lts.jks
https_key_password = ltspass
https_store_password = ltspass
# 静态文件,启用了http或https服务时有效
# 路径列表
plugin_sf_paths = /var/www/html,/usr/shard/nginx/html
# 需要数量静态文件的host列表
plugin_sf_hosts = static1.yourdomain.com,static2.yourdomain.com
# Http Rpc绑定端口,为空时不启用Http Rpc
http_rpc_port = 5081
# Http Rpc登录用户,没有配置时不需要登录
http_rpc_username = guest
http_rpc_password = guest
# 日志
# 日志等级由低到高 ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF
log_level = INFO
# 日志文件,为空时不保存日志文件
log_file = ./logs/lts.log
# 保持的日志文件数量
log_count = 3
# 单个日志文件大小,支持KB、MB、GB单位
log_size = 1MB
客户端完整配置参考
[basic]
# 线程数,值为-1时不限制线程数量
worker_threads = -1
# 服务器地址
server_addr = 127.0.0.1
# 服务器端口
server_port = 5080
# 验证Token需要与服务器一致
auth_token = tk123456
# ssl jks证书文件,当隧道列表中有使用了ssl时生效,加载失败时会默认使用程序内建的证书
ssl_server_port = 5443
ssl_jks = ltc.jks
ssl_store_password = ltcpass
# Http Rpc绑定端口,为空时不启用Http Rpc
http_rpc_port = 5082
# Http Rpc登录用户,没有配置时不需要登录
http_rpc_username = guest
http_rpc_password = guest
# 日志
# 日志等级由低到高 ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF
log_level = INFO
# 日志文件,为空时不保存日志文件
log_file = ./logs/lts.log
# 保持的日志文件数量
log_count = 3
# 单个日志文件大小,支持KB、MB、GB单位
log_size = 1MB
# 隧道列表
# 命名空间相同的隧道会被覆盖掉
[tcp]
# 隧道类型,支持tcp,http,https
type = tcp
# 是否使用ssl连接,true|false
ssl = true
# 本地地址
local_addr = 192.168.1.1
# 本地端口
local_port = 80
# 隧道服务器端口,端口号设置成0时,为随机端口
remote_port = 10080
[tcp-random]
type = tcp
ssl = true
local_addr = 192.168.1.1
local_port = 80
remote_port = 0
[http]
# 隧道类型,支持tcp,http,https
type = http
# 是否使用ssl连接,true|false
ssl = true
# 本地地址
local_addr = 192.168.1.1
# 本地端口
local_port = 80
# 自定义域名,需要域名DNS设置指向服务器地址
host = t1.tunnel.lo
# 代理请求头设置,其中$remote_addr为魔法变量,最终会替换成用户的真实IP
pxy_header_set_X-Real-IP = $remote_addr
# 代理请求头新增
pxy_header_add_X-User-Agent = LightTunnel
# 登录验证信息,没有配置时不需要登录
auth_realm = .
auth_username = guest
auth_password = guest
[https]
# 隧道类型,支持tcp,http,https
type = https
# 是否使用ssl连接,true|false
ssl = true
# 本地地址
local_addr = 192.168.1.1
# 本地端口
local_port = 80
# 自定义域名,需要域名DNS设置指向服务器地址
host = t1.tunnel.lo
# 代理请求头设置,其中$remote_addr为魔法变量,最终会替换成用户的真实IP
pxy_header_set_X-Real-IP = $remote_addr
# 代理请求头新增
pxy_header_add_X-User-Agent = LightTunnel
# 登录验证信息,没有配置时不需要登录
auth_realm = .
auth_username = guest
auth_password = guest
0x04 自定义SSL证书生成
生成服务端证书
keytool -genkey \
-alias ltsalias \
-keysize 2048 \
-validity 3650 \
-keyalg RSA \
-dname "CN=LTS" \
-keypass ltspass \
-storepass ltspass \
-keystore lts.jks
keytool -importkeystore \
-srckeystore lts.jks \
-destkeystore lts.jks \
-deststoretype pkcs12
keytool -export \
-alias ltsalias \
-keystore lts.jks \
-storepass ltspass \
-file lts.cer
生成客户端证书
keytool -genkey \
-alias ltcalias \
-keysize 2048 \
-validity 3650 \
-keyalg RSA \
-dname "CN=LTC" \
-keypass ltcpass \
-storepass ltcpass \
-keystore ltc.jks
keytool -importkeystore \
-srckeystore ltc.jks \
-destkeystore ltc.jks \
-deststoretype pkcs12
keytool -import -trustcacerts \
-alias ttsalias \
-file lts.cer \
-storepass ltcpass \
-keystore ltc.jks