端口转发轮子

2019-06-05 13:47:47 +08:00
 azh7138m

轮子地址

简陋的文档

之前会有端口转发的需求,iptables 没有 api 不太方便,于是重新包了一下 docker/go-connections ,就是现在这个轮子了。

提供几个简单的 api 来控制映射到的端口,写了个简单的 web 来展示 api 怎么使用。

3191 次点击
所在节点    分享创造
33 条回复
azh7138m
2019-08-18 16:59:24 +08:00
@solaro
只修改 local
5000/10000 192.168.2.205:5000
target 的端口只给一个起始就行
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
solaro
2019-08-19 10:46:10 +08:00
@azh7138m 在 centos 7 64bit 下执行会提示
```
Segmentation fault
```

使用的是 freebsd 版本
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

```
azh7138m
2019-08-19 12:16:22 +08:00
@solaro 大哥你用 linux 的版本啊,freebsd 和 linux 不是一个东西
solaro
2019-08-19 23:05:35 +08:00
@azh7138m 哈哈,尴尬,后面用了 amd_64 的 ,报了上面那个错误,而且我自己编译出来的 amd-64 的包都是 0k 不知道为什么。会不会是你的那个编译 sh 没有设置好
azh7138m
2019-08-20 01:04:15 +08:00
@solaro 64 位 CentOS 应该使用 linux-amd64 freebsd 和 linux 是两个东西
azh7138m
2019-08-20 01:07:04 +08:00
@solaro 看到是 Linux AMD64 了,我周末找个 CnetOS 看一下吧
azh7138m
2019-08-20 01:56:35 +08:00
@solaro
https://i.loli.net/2019/08/20/BCbTUZ9NKtdsyM1.png
这里已经没问题了

build 要求你本地有安装 go,且可以正常联网
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"
}

```
solaro
2019-08-22 22:49:29 +08:00
能否把端口段改为这样的格式吗?可读性能高,便于理解

```
{
"proxy": {
"5000/10000": "47.74.XXX.XXX:5000/10000"
},
"APIPort": ":3001"
}

```
azh7138m
2019-08-25 01:29:08 +08:00
@solaro 我没注意到后面的 proxy run 会阻塞,只会绑定第一个端口,现在已经好了; target 给出结束的端口没意义,反而还要校验一次长度是否一致
solaro
2019-08-26 10:32:55 +08:00
@azh7138m 哥哥,经过一系列的测试,目前仅剩一个:udp 不通。其他都完美

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571106

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX