之前会有端口转发的需求,iptables 没有 api 不太方便,于是重新包了一下 docker/go-connections ,就是现在这个轮子了。
提供几个简单的 api 来控制映射到的端口,写了个简单的 web 来展示 api 怎么使用。
1
MeteorCat 2019-06-05 15:53:40 +08:00 via Android
哈哈哈,第一次见到开头就说低性能的 xxx,在看惯所有标题开头就是高性能的 xxx 的项目当中,感觉有点惊艳
|
2
yejinmo 2019-06-05 15:57:42 +08:00
haproxy ?
|
3
azh7138m OP @MeteorCat 第一版是自己写的,并没有用 docker/go-connections 这个库,所以是低性能 :D
|
4
azh7138m OP @yejinmo 也可以啊,但是它的 api 一次刷新全量的 config,不太好用,而且我还想转发 UDP 流量,HA 应该是做 TCP/HTTP LB 的,这个场景不适合
|
5
airfling 2019-06-05 16:10:59 +08:00
看你的标题,我差点以为你要被封
|
6
sc104501 2019-06-05 16:17:21 +08:00 via Android
之前用的 rinetd,和这个有区别吗?
|
7
azh7138m OP @sc104501 实现的功能一样(我这个只有转发没有 ACL ),这个轮子只是提供了一个 HTTP API 来操作映射的规则
|
8
slwl123 2019-06-29 19:01:19 +08:00
希望能转发 UDP 支持 LZ
|
10
solaro 2019-08-13 07:33:31 +08:00
支持端口段吗??
|
11
solaro 2019-08-13 07:34:46 +08:00
看起来并不支持端口段。。强烈关注楼主。
|
13
solaro 2019-08-14 10:05:13 +08:00
@azh7138m 持续关注,大佬加功能吧,我用过 haproxy 不支持 udp,试过 socat 不支持端口段,最后方案 iptables。。只能用脚本,一脸苦
|
14
azh7138m OP @solaro 现在支持端口段了
local 传 3000/3999 这种,代表转发这 1k 个端口,其他没变化 |
16
solaro 2019-08-18 16:01:00 +08:00
@azh7138m 大佬你好,我自行编译后体验了一下:通过 powershell 在 win 下以超管权限启动了,使用 postman 请求 api,但是 api 无任何返回,postman 一直在请求中
|
17
azh7138m OP @solaro
https://i.loli.net/2019/08/18/SzOJ8Uw2MQabI9V.png 我这里没有问题 - 你提供 config 了吗 - 我有提供 release,可以不用自己编译 |
18
solaro 2019-08-18 16:17:09 +08:00
@azh7138m 哈哈可以了,不知道为什么第一次启动的时候,windows 防火墙放行之后,必须得到 powershell 里敲一下 enter,否则 无论怎么请求,都不显示任何信息,请求被拒,( tcping 的时候端口是开放的,但是就是不接收请求)
|
19
solaro 2019-08-18 16:54:05 +08:00
@azh7138m 请问:我如何 将 A 主机的端口段转发到 B 主机的端口段,config 怎么写呢?
例如:A 主机的 5000 到 10000 端口 全部转发到 B 的 5000 到 10000 端口,A 主机的 10000-20000 转发到 C 的 10000 到 20000 这样 |
20
solaro 2019-08-18 16:57:16 +08:00
@azh7138m 如果我 config 里这么写
``` { "proxy": { "3000": "127.0.0.1:10086", "5000/10000": "192.168.2.205:5000/10000" }, "APIPort": ":3001" } ``` 直接蹦掉了 ``` 2019/08/18 16:56:10 proxy 3000 to 127.0.0.1:10086 2019/08/18 16:56:10 lookup tcp/5000/10000: getaddrinfow: The specified class was not found. ``` |
21
azh7138m OP |
22
solaro 2019-08-19 10:42:29 +08:00
@azh7138m 改进性需求
1.希望可以 自定义 config.json 路径,例如 --config=/tmp/config.json 或者 -config=/tmp/config.json 2.希望有 --help 或者 -help 3.如果不带参数启动,默认加载当前目录下的 config.json |
23
solaro 2019-08-19 10:46:10 +08:00
|
24
solaro 2019-08-19 10:51:56 +08:00
@azh7138m
我从你的 released 下了 amd_64 版本到 centos7.6 64bit 上测试,config.json 位于 portfwd 同目录下,配置如下: ``` { "proxy": { "5000/10000": "47.74.XXX.XXX:5000" }, "APIPort": ":3001" } ``` 结果: ``` goroutine 5525 [IO wait]: internal/poll.runtime_pollWait(0x7f02a97a06a8, 0x72, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/runtime/netpoll.go:173 +0x66 internal/poll.(*pollDesc).wait(0xc000ed8798, 0x72, 0x0, 0x0, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/internal/poll/fd_poll_runtime.go:85 +0x9a internal/poll.(*pollDesc).waitRead(0xc000ed8798, 0xc0015dff00, 0xffe3, 0xffe3) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/internal/poll/fd_poll_runtime.go:90 +0x3d internal/poll.(*FD).ReadFrom(0xc000ed8780, 0xc0015dff15, 0xffe3, 0xffe3, 0x0, 0x0, 0x0, 0x0, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/internal/poll/fd_unix.go:219 +0x168 net.(*netFD).readFrom(0xc000ed8780, 0xc0015dff15, 0xffe3, 0xffe3, 0x0, 0x0, 0x0, 0x0, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/net/fd_unix.go:208 +0x5b net.(*UDPConn).readFrom(0xc00000c908, 0xc0015dff15, 0xffe3, 0xffe3, 0x0, 0x0, 0x0, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/net/udpsock_posix.go:47 +0x6a net.(*UDPConn).ReadFromUDP(0xc00000c908, 0xc0015dff15, 0xffe3, 0xffe3, 0x0, 0x0, 0x0, 0x0) /home/travis/.gimme/versions/go1.11.13.linux.amd64/src/net/udpsock.go:109 +0x6d github.com/docker/go-connections/proxy.(*UDPProxy).Run(0xc00105ba40) /home/travis/gopath/src/github.com/docker/go-connections/proxy/udp_proxy.go:116 +0x1e1 main.prepareUDPHandler(0x1e4f, 0xc000ed4840) /home/travis/gopath/src/github.com/muzea/portfwd/portfw.go:100 +0x1e2 created by main.addProxyItem /home/travis/gopath/src/github.com/muzea/portfwd/portfw.go:61 +0x28e ``` |
25
azh7138m OP @solaro 大哥你用 linux 的版本啊,freebsd 和 linux 不是一个东西
|
26
solaro 2019-08-19 23:05:35 +08:00
@azh7138m 哈哈,尴尬,后面用了 amd_64 的 ,报了上面那个错误,而且我自己编译出来的 amd-64 的包都是 0k 不知道为什么。会不会是你的那个编译 sh 没有设置好
|
27
azh7138m OP @solaro 64 位 CentOS 应该使用 linux-amd64 freebsd 和 linux 是两个东西
|
29
azh7138m OP |
30
solaro 2019-08-22 22:47:44 +08:00
@azh7138m 持续关注了项目距哈哈,我用了最新版的 0.0.5,在 centos7 下可以用了,单个端口可以,端口段不能用。不知道为什么。
单个端口可以通: ``` { "proxy": { "5000": "47.74.XXX.XXX:5000" }, "APIPort": ":3001" } ``` 端口段不行,也没有任何日志,不知道为啥: ``` { "proxy": { "5000/10000": "47.74.XXX.XXX:5000" }, "APIPort": ":3001" } ``` |
31
solaro 2019-08-22 22:49:29 +08:00
能否把端口段改为这样的格式吗?可读性能高,便于理解
``` { "proxy": { "5000/10000": "47.74.XXX.XXX:5000/10000" }, "APIPort": ":3001" } ``` |