[GH-ISSUE #1909] 请问 frp plugin unix_domain_socket 支援abstract吗? #1515

Closed
opened 2026-05-05 12:57:23 -06:00 by gitea-mirror · 9 comments
Owner

Originally created by @kingwilliam on GitHub (Jul 20, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/1909

请问 frp client plugin unix_domain_socket 支援abstract吗?

Originally created by @kingwilliam on GitHub (Jul 20, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/1909 请问 frp client plugin unix_domain_socket 支援abstract吗?
Author
Owner

@fatedier commented on GitHub (Jul 20, 2020):

能具体说明一下?场景以及参数的用途。

<!-- gh-comment-id:660908483 --> @fatedier commented on GitHub (Jul 20, 2020): 能具体说明一下?场景以及参数的用途。
Author
Owner

@kingwilliam commented on GitHub (Jul 20, 2020):

简单描述 就是容易处理 unix socket 的sock file.

节录 https://blog.helong.info/post/2020/03/03/abstract-unix-socket-single-instance/

相比 普通的基于文件系统的 unix socket,abstract namespace unix socket :

  1. 没有磁盘文件
  2. 进程挂了以后自动删除,无残留文件
  3. 无需担心与 文件系统上的文件冲突,不需要关心文件系统上的绝对路径是否存在的问题

因我的frp後就是haproxy, 而haproxy已支援abstract domain socket 如 frp也支援就锦上添花, 免了每次都要先删除旧的sock file.

<!-- gh-comment-id:660932227 --> @kingwilliam commented on GitHub (Jul 20, 2020): 简单描述 就是容易处理 unix socket 的sock file. 节录 https://blog.helong.info/post/2020/03/03/abstract-unix-socket-single-instance/ 相比 普通的基于文件系统的 unix socket,abstract namespace unix socket : 1. 没有磁盘文件 2. 进程挂了以后自动删除,无残留文件 3. 无需担心与 文件系统上的文件冲突,不需要关心文件系统上的绝对路径是否存在的问题 因我的frp後就是haproxy, 而haproxy已支援abstract domain socket 如 frp也支援就锦上添花, 免了每次都要先删除旧的sock file.
Author
Owner

@fatedier commented on GitHub (Jul 20, 2020):

应该已经支持,在 plugin_unix_path 中以 @ 开头,例如 plugin_unix_path=@/tmp/test.sock 即可。

<!-- gh-comment-id:661041915 --> @fatedier commented on GitHub (Jul 20, 2020): 应该已经支持,在 `plugin_unix_path` 中以 `@` 开头,例如 `plugin_unix_path=@/tmp/test.sock` 即可。
Author
Owner

@kingwilliam commented on GitHub (Jul 20, 2020):

已测试 没成功

// frpc.ini
[haproxy01]
type = tcp
plugin = unix_domain_socket
plugin_unix_path = @/tmp/frp_haproxy.sock
remote_port = 12345

// haproxy
bind abns@/tmp/frp_haproxy.sock mode 777

已跟指示 加入@在path
plugin_unix_path=@/tmp/test.sock

frp client 成功启动
frp client 和 server log 都已看见连接
但就是 不能接驳 frp client-> haproxy

但回复没@时就一切正常

// frpc.ini
[haproxy01]
type = tcp
plugin = unix_domain_socket
plugin_unix_path = /tmp/frp_haproxy.sock
remote_port = 12345

// haproxy
bind /tmp/frp_haproxy.sock mode 777
<!-- gh-comment-id:661109423 --> @kingwilliam commented on GitHub (Jul 20, 2020): 已测试 没成功 ``` // frpc.ini [haproxy01] type = tcp plugin = unix_domain_socket plugin_unix_path = @/tmp/frp_haproxy.sock remote_port = 12345 // haproxy bind abns@/tmp/frp_haproxy.sock mode 777 ``` 已跟指示 加入@在path plugin_unix_path=@/tmp/test.sock frp client 成功启动 frp client 和 server log 都已看见连接 但就是 不能接驳 frp client-> haproxy 但回复没@时就一切正常 ``` // frpc.ini [haproxy01] type = tcp plugin = unix_domain_socket plugin_unix_path = /tmp/frp_haproxy.sock remote_port = 12345 // haproxy bind /tmp/frp_haproxy.sock mode 777 ```
Author
Owner

@fatedier commented on GitHub (Jul 21, 2020):

我本地测试没有问题,可以看下日志具体的错误是什么

<!-- gh-comment-id:661611335 --> @fatedier commented on GitHub (Jul 21, 2020): 我本地测试没有问题,可以看下日志具体的错误是什么
Author
Owner

@kingwilliam commented on GitHub (Jul 21, 2020):

好的 谢谢 我再测试
就是没错误讯息 frp有接驳纪录 但haproxy就什麽也没有

<!-- gh-comment-id:661612327 --> @kingwilliam commented on GitHub (Jul 21, 2020): 好的 谢谢 我再测试 就是没错误讯息 frp有接驳纪录 但haproxy就什麽也没有
Author
Owner

@kingwilliam commented on GitHub (Jul 21, 2020):

试了很多组合还是失败, 暂先放下.
server log, client log没什麽发现, haproxy 没有任何log.

节录: https://www.bookstack.cn/read/HAProxy-2.0-configuration/spilt.2.spilt.5.7ecb46b3ffd31d9b.md

Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
      sun_path length is used for the address length. Some other programs
      such as socat use the string length only by default. Pass the option
      ",unix-tightsocklen=0" to any abstract socket definition in socat to
      make it compatible with HAProxy's.

不知有没有关系

// frpc.ini
[haproxy01]
type = tcp
plugin = unix_domain_socket
plugin_unix_path = @/tmp/frp_haproxy.sock
remote_port = 12345

// haproxy
bind abns@/tmp/frp_haproxy.sock mode 777



# x.y.z.174 = client ip
# a.b.c.76 = server ip



# frps.log
2020/07/21 13:13:55 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47956]
2020/07/21 13:13:55 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool
2020/07/21 13:13:55 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443]
2020/07/21 13:13:55 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true
2020/07/21 13:13:55 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47956])
2020/07/21 13:13:55 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered
2020/07/21 13:14:03 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed

2020/07/21 13:14:03 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47958]
2020/07/21 13:14:03 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool
2020/07/21 13:14:03 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443]
2020/07/21 13:14:03 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true
2020/07/21 13:14:03 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47958])
2020/07/21 13:14:03 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered
2020/07/21 13:14:11 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed

2020/07/21 13:14:12 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47960]
2020/07/21 13:14:12 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool
2020/07/21 13:14:12 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443]
2020/07/21 13:14:12 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true
2020/07/21 13:14:12 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47960])
2020/07/21 13:14:12 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered
2020/07/21 13:14:17 [D] [control.go:474] [1b77d1d1c2ace066] receive heartbeat
2020/07/21 13:14:20 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed

2020/07/21 13:14:20 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47962]
2020/07/21 13:14:20 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool
2020/07/21 13:14:20 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443]
2020/07/21 13:14:20 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true
2020/07/21 13:14:20 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47962])
2020/07/21 13:14:20 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered
2020/07/21 13:14:28 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed




# frpc.log
2020/07/21 12:11:55 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:577420 remoteAddr: a.b.c.76:34343
2020/07/21 12:11:55 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true
2020/07/21 12:11:55 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket
2020/07/21 12:11:55 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished

2020/07/21 12:12:03 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343
2020/07/21 12:12:03 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true
2020/07/21 12:12:03 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket
2020/07/21 12:12:03 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished

2020/07/21 12:12:11 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343
2020/07/21 12:12:11 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true
2020/07/21 12:12:11 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket
2020/07/21 12:12:11 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished

2020/07/21 12:12:17 [D] [control.go:300] [1b77d1d1c2ace066] send heartbeat to server
2020/07/21 12:12:17 [D] [control.go:331] [1b77d1d1c2ace066] receive heartbeat from server
2020/07/21 12:12:19 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343
2020/07/21 12:12:19 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true
2020/07/21 12:12:19 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket
2020/07/21 12:12:19 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished
<!-- gh-comment-id:661654447 --> @kingwilliam commented on GitHub (Jul 21, 2020): 试了很多组合还是失败, 暂先放下. server log, client log没什麽发现, haproxy 没有任何log. 节录: https://www.bookstack.cn/read/HAProxy-2.0-configuration/spilt.2.spilt.5.7ecb46b3ffd31d9b.md ``` Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole sun_path length is used for the address length. Some other programs such as socat use the string length only by default. Pass the option ",unix-tightsocklen=0" to any abstract socket definition in socat to make it compatible with HAProxy's. ``` 不知有没有关系 ``` // frpc.ini [haproxy01] type = tcp plugin = unix_domain_socket plugin_unix_path = @/tmp/frp_haproxy.sock remote_port = 12345 // haproxy bind abns@/tmp/frp_haproxy.sock mode 777 # x.y.z.174 = client ip # a.b.c.76 = server ip # frps.log 2020/07/21 13:13:55 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47956] 2020/07/21 13:13:55 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool 2020/07/21 13:13:55 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443] 2020/07/21 13:13:55 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true 2020/07/21 13:13:55 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47956]) 2020/07/21 13:13:55 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered 2020/07/21 13:14:03 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed 2020/07/21 13:14:03 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47958] 2020/07/21 13:14:03 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool 2020/07/21 13:14:03 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443] 2020/07/21 13:14:03 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true 2020/07/21 13:14:03 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47958]) 2020/07/21 13:14:03 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered 2020/07/21 13:14:11 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed 2020/07/21 13:14:12 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47960] 2020/07/21 13:14:12 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool 2020/07/21 13:14:12 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443] 2020/07/21 13:14:12 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true 2020/07/21 13:14:12 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47960]) 2020/07/21 13:14:12 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered 2020/07/21 13:14:17 [D] [control.go:474] [1b77d1d1c2ace066] receive heartbeat 2020/07/21 13:14:20 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed 2020/07/21 13:14:20 [D] [proxy.go:162] [1b77d1d1c2ace066] [haproxy01] get a user connection [127.0.0.1:47962] 2020/07/21 13:14:20 [D] [control.go:248] [1b77d1d1c2ace066] get work connection from pool 2020/07/21 13:14:20 [I] [proxy.go:103] [1b77d1d1c2ace066] [haproxy01] get a new work connection: [x.y.z.174:47443] 2020/07/21 13:14:20 [T] [proxy.go:262] [1b77d1d1c2ace066] [haproxy01] handler user tcp connection, use_encryption: false, use_compression: true 2020/07/21 13:14:20 [D] [proxy.go:273] [1b77d1d1c2ace066] [haproxy01] join connections, workConn(l[a.b.c.76:34343] r[x.y.z.174:47443]) userConn(l[127.0.0.1:12345] r[127.0.0.1:47962]) 2020/07/21 13:14:20 [D] [control.go:219] [1b77d1d1c2ace066] new work connection registered 2020/07/21 13:14:28 [D] [proxy.go:283] [1b77d1d1c2ace066] [haproxy01] join connections closed # frpc.log 2020/07/21 12:11:55 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:577420 remoteAddr: a.b.c.76:34343 2020/07/21 12:11:55 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true 2020/07/21 12:11:55 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket 2020/07/21 12:11:55 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished 2020/07/21 12:12:03 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343 2020/07/21 12:12:03 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true 2020/07/21 12:12:03 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket 2020/07/21 12:12:03 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished 2020/07/21 12:12:11 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343 2020/07/21 12:12:11 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true 2020/07/21 12:12:11 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket 2020/07/21 12:12:11 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished 2020/07/21 12:12:17 [D] [control.go:300] [1b77d1d1c2ace066] send heartbeat to server 2020/07/21 12:12:17 [D] [control.go:331] [1b77d1d1c2ace066] receive heartbeat from server 2020/07/21 12:12:19 [D] [proxy_wrapper.go:231] [1b77d1d1c2ace066] [haproxy01] start a new work connection, localAddr: 192.168.0.253:57720 remoteAddr: a.b.c.76:34343 2020/07/21 12:12:19 [T] [proxy.go:709] [1b77d1d1c2ace066] [haproxy01] handle tcp work connection, use_encryption: false, use_compression: true 2020/07/21 12:12:19 [D] [proxy.go:758] [1b77d1d1c2ace066] [haproxy01] handle by plugin: unix_domain_socket 2020/07/21 12:12:19 [D] [proxy.go:760] [1b77d1d1c2ace066] [haproxy01] handle by plugin finished ```
Author
Owner

@fatedier commented on GitHub (Jul 21, 2020):

有可能,我测试的是自己编写的 golang 的服务端绑定的地址。但是这个取决于 golang 的实现,frp 本身应该比较难做这个适配。

<!-- gh-comment-id:661718353 --> @fatedier commented on GitHub (Jul 21, 2020): 有可能,我测试的是自己编写的 golang 的服务端绑定的地址。但是这个取决于 golang 的实现,frp 本身应该比较难做这个适配。
Author
Owner

@kingwilliam commented on GitHub (Jul 21, 2020):

谢谢

<!-- gh-comment-id:661779369 --> @kingwilliam commented on GitHub (Jul 21, 2020): 谢谢
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1515
No description provided.