您现在的位置是:首页 > 文章详情

🎉🎉 wmproxy 0.2.7 发布,用 rust 仿 nginx 实现,多端口地址监听

日期:2024-02-07点击:63

0.2.7 添加多地址解析监听

以下是常见的IP解析示例情况,本地ip为192.168.0.100示例:

  • 正常IP解析

    • 127.0.0.1:8869 解析成 ipv4 127.0.0.1 端口 8869,只接受本地来的连接信息
    • 0.0.0.0:8869 解析成 ipv4 0.0.0.0 端口 8869,可接受所有来自ipv4的连接信息
  • :开头的地址,且不包含-

    • :8869 解析成 ipv4 127.0.0.1 端口 8869 及 ipv4 192.168.0.100 端口 8869
  • 包含-的地址

    • :8869-:8871 解析成 ipv4 127.0.0.1 端口 8869 - 8871 三个端口地址 及 ipv4 192.168.0.100 端口 8869 - 8871 三个端口地址,总共6个端口地址
    • 127.0.0.1:8869-:8871 解析成 ipv4 127.0.0.1 端口 8869 - 8871 三个端口地址 总共3个端口地址
    • 127.0.0.1:8869-192.168.0.100:8871 解析成 ipv4 127.0.0.1 端口 8869 - 8871 三个端口地址 总共3个端口地址,忽略后面的地址,只接受端口号
  • 手动多个地址,可以空格或者,做间隔

    • 127.0.0.1:8869 127.0.0.1:8899 192.168.0.100:8899 就相应的解析成三个端口地址

wmproxy 已用 Rust 实现 http/https 代理,socks5 代理,反向代理,负载均衡,静态文件服务器,四层 TCP/UDP 转发,内网穿透,后续将实现 websocket 代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子

📦 安装 & 🏃 使用

安装

 cargo install wmproxy 

OR

 git clone https://github.com/tickbh/wmproxy cd wmproxy cargo install --path . 
 docker pull dreamwhat/wmproxy docker run -p 82:82 -p 8090:8090 -p 127.0.0.1:8837:8837 --name proxy_bash dreamwhat/wmproxy /bin/./wmproxy proxy -b 0.0.0.0:8090 

使用

默认端口为 8090 端口,默认监听地址为 127.0.0.1

 # 直接通用默认参数 wmproxy proxy  # 设置账号密码 wmproxy proxy -b 0.0.0.0:8090 --user wmproxy --pass wmproxy  # 其它指令 wmproxy --help  #配置文件版启动 wmproxy config -c config/client.toml
 

启动二级代理

  1. 在本地启动代理
 wmproxy proxy -b 127.0.0.1:8090 -S 127.0.0.1:8091 --ts 

或者

 wmproxy config -c config/client.toml 

配置文件如下:

 [proxy] # 连接服务端地址 #server = "127.0.0.1:8091" bind_addr = "0.0.0.0:8090" flag = "http https socks5" # 连接服务端是否加密 ts = true two_way_tls = true # username = "wmproxy" # password = "wmproxy" # 内网映射配置的数组  #将localhost的域名转发到本地的127.0.0.1:8080 [[proxy.mappings]] name = "web" mode = "http" local_addr = "127.0.0.1:8080" domain = "localhost" headers = [  "proxy x-forward-for {client_ip}",  "proxy + from $url",  "+ last-modified 'from proxy'",  "- etag", ] #将tcp的流量无条件转到127.0.0.1:8080 [[proxy.mappings]] name = "tcp" mode = "tcp" local_addr = "127.0.0.1:8080" domain = "" 

因为纯转发,所以在当前节点设置账号密码没有意义 -S 表示连接到的二级代理地址,有该参数则表示是中转代理,否则是末端代理。--ts 表示连接父级代理的时候需要用加密的方式链接

  1. 在远程启动代理
 wmproxy proxy --user proxy --pass proxy -b 0.0.0.0:8091 --tc 

或者

 wmproxy config -c config/server.toml 

配置文件如下:

 [proxy] #绑定的ip地址 bind_addr = "127.0.0.1:8091" #代理支持的功能,1为http,2为https,4为socks5 # flag = "7" username = "wmproxy" password = "wmproxy" #内网映射http绑定地址 map_http_bind = "127.0.0.1:8001" #内网映射tcp绑定地址 map_tcp_bind = "127.0.0.1:8002" #内网映射https绑定地址 map_https_bind = "127.0.0.1:8003" #内网映射的公钥证书,为空则是默认证书 # map_cert =  #内网映射的私钥证书,为空则是默认证书 # map_key = # 双向认证 two_way_tls = true #接收客户端是为是加密客户端 tc = true #当前服务模式,server为服务端,client为客户端 mode = "server" 

--tc 表示接收子级代理的时候需要用加密的方式链接,可以 --cert 指定证书的公钥,--key 指定证书的私钥,--domain 指定证书的域名,如果不指定,则默认用自带的证书参数

至此通过代理访问的,我们已经没有办法得到真正的请求地址,只能得到代理发起的请求

代理间的认证

目前提供了两种认证双式,two_way_tls 开启客户端的证书认证信息,另一种服务端配置了 username  password 即需要客户端配置相同的用户密码才能启用认证信息,两种方式可叠加使用或者单独使用。 配置添加如下:

 proxy:  two_way_tls: true  username: wmproxy  password: wmproxy 

🚥 路线图

socks5

  • IPV6 支持
  • SOCKS5 验证方式
    • NOAUTH
    • USERPASS
  • SOCKS5 Commands
    • CONNECT
    • UDP ASSOCIATE

http/https

  • IPV6 支持

内网穿透

  • Http 支持
  • Https 支持
  • Tcp 支持

反向代理

  • 静态文件服务器
  • 被动健康检查
  • 主动健康检查
  • 配置热加载
  • 负载均衡
  • 四层 TCP 负载
  • 四层 UDP 负载
  • 流量控制
  • websocket 转发

基础能力

  • 日志

扩展能力

  • 请求限速 (limit_req)
  • 修改 HTTP 请求 Header
  • 支持 HTTP2 的内网穿透
  • 控制微端
  • try_paths
  • tcp 转 websocket
  • websocket 转 tcp
原文链接:https://www.oschina.net/news/278152/wmproxy-0-2-7-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章