尝试使用了 Windows 自带的 netsh,转发效率非常低,导致网速非常慢。也尝试了一款叫 NetworkActivAUTAPFv2.2 的应用软件,相对理想,但已经没人维护,会定时弹窗断开连接。
有什么其他高效软件可以推荐一下的? 主要是转发 TCP 流量
1
xihefeng 2021-02-23 20:49:50 +08:00
gost
|
2
crab 2021-02-23 21:48:05 +08:00
netcat?
|
3
hanxiV2EX 2021-02-23 21:56:54 +08:00 via Android
frp?
|
4
iamwin 2021-02-23 22:18:00 +08:00
nginx?
|
5
jigi330 2021-02-23 23:24:21 +08:00
nginx 或者 caddy 都应该可以
|
6
FreeEx 2021-02-23 23:31:58 +08:00 via iPhone
|
7
Cooky 2021-02-23 23:35:35 +08:00
改自带防火墙规则?
|
8
laminux29 2021-02-23 23:47:03 +08:00 1
你踩坑了。
这问题的本质是,网络协议非常复杂,能实现大部分网络特性,并且 bug 少、维护情况好的软件,大多数都在 linux 的服务器应用上,比如大家推荐的 nginx 。 Windows 的 netsh 、route 等,因为用的人太少,甚至连基本功能的实现都有问题,更别提稳定性。 所以,网络应用,建议用 Linux + nginx 。 |
9
Dkngit 2021-02-23 23:47:09 +08:00 via iPhone
|
10
44670 2021-02-23 23:53:06 +08:00
|
11
44670 2021-02-23 23:55:18 +08:00
EDIT:上面的似乎不行,也许可以试试这个看看: https://gist.github.com/qhwa/cb9d3851450bff3b705e
|
12
ragnaroks 2021-02-24 08:54:01 +08:00
v2ray,gost,port-forwarder 3 个 CLI,在 github 上都有
port mapper 这个 GUI 的,只能在下载站找到 |
13
march1993 2021-02-24 14:08:38 +08:00
goang 自己写一个?
```golang package main import ( "fmt" "net" "os" "io" "time" "os/signal" "syscall" ) type Config struct { ListenAddr string ForwardAddr string } var configs []*Config = []*Config{ // {ListenAddr: ":1995", ForwardAddr: "1.2.3.4:199"}, // {ListenAddr: ":8081", ForwardAddr: "5.6.7.8:8081"}, // {ListenAddr: ":2222", ForwardAddr: "9.10.11.12:22"}, {ListenAddr: ":8081", ForwardAddr: "192.168.1.10:30000"}, } func worker(c *Config) { fmt.Println("forwarding", c.ListenAddr, " to", c.ForwardAddr) if l, err := net.Listen("tcp", c.ListenAddr); nil != err { panic(err) } else { defer l.Close() for { if left, err := l.Accept(); nil != err { fmt.Println("listen: accept error: ", err.Error()) continue } else { if right, err := net.Dial("tcp", c.ForwardAddr); nil != err { fmt.Println("listen: dial error:", err.Error()) left.Close() } else { go Relay(left, right) } } } } } func main() { c := make(chan os.Signal) signal.Notify(c, os.Interrupt, syscall.SIGTERM) for _, config := range configs { go worker(config) } _ = <-c } func Relay(left, right net.Conn) (int64, int64, error) { type res struct { N int64 Err error } ch := make(chan res) go func() { n, err := io.Copy(right, left) right.SetDeadline(time.Now()) // wake up the other goroutine blocking on right left.SetDeadline(time.Now()) // wake up the other goroutine blocking on left ch <- res{n, err} }() n, err := io.Copy(left, right) right.SetDeadline(time.Now()) // wake up the other goroutine blocking on right left.SetDeadline(time.Now()) // wake up the other goroutine blocking on left rs := <-ch if err == nil { err = rs.Err } return n, rs.N, err } ``` |
14
zhangzewa 2021-02-24 15:37:39 +08:00
nps
|