socks5: support protocol chain with unix socket(#291)

This commit is contained in:
nadoo 2022-01-19 23:25:58 +08:00
parent cf1a4e3817
commit 720f12aa0a
6 changed files with 25 additions and 20 deletions

View File

@ -66,6 +66,19 @@ archives:
- config/**/*
- systemd/*
# https://goreleaser.com/customization/snapshots/
snapshot:
name_template: '{{ incpatch .Version }}-dev'
# https://goreleaser.com/customization/checksum/
checksum:
name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"
# https://goreleaser.com/customization/release/
release:
prerelease: true
draft: true
# https://goreleaser.com/customization/nfpm/
nfpms:
-
@ -104,16 +117,3 @@ nfpms:
triggers:
interest_noawait:
- /lib/systemd/systemd
# https://goreleaser.com/customization/snapshots/
snapshot:
name_template: '{{ incpatch .Version }}-dev'
# https://goreleaser.com/customization/checksum/
checksum:
name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"
# https://goreleaser.com/customization/release/
release:
prerelease: true
draft: true

View File

@ -1,9 +1,9 @@
forward=http://forwarder4:8080
forward=http://forwarder1:8080
# first connect forwarder1 then forwarder2 then internet
forward=http://forwarder5:8080,socks6://forwarder3:1080
forward=http://forwarder1:8080,socks5://forwarder2:1080
# Round Robin mode: rr

View File

@ -1,9 +1,9 @@
forward=http://forwarder4:8080
forward=http://forwarder1:8080
# first connect forwarder1 then forwarder2 then internet
forward=http://forwarder5:8080,socks5://forwarder3:1080
forward=http://forwarder1:8080,socks5://forwarder2:1080
# Round Robin mode: rr

View File

@ -271,6 +271,9 @@ func (s *Socks5) handshake(c net.Conn) (socks.Addr, error) {
_, err = c.Write([]byte{5, 0, 0, 1, 0, 0, 0, 0, 0, 0}) // SOCKS v5, reply succeeded
case socks.CmdUDPAssociate:
listenAddr := socks.ParseAddr(c.LocalAddr().String())
if listenAddr == nil { // maybe it's unix socket
listenAddr = socks.ParseAddr("127.0.0.1:0")
}
_, err = c.Write(append([]byte{5, 0, 0}, listenAddr...)) // SOCKS v5, reply succeeded
if err != nil {
return nil, socks.Errors[7]

View File

@ -27,7 +27,7 @@ func (s *Unix) Addr() string {
// Dial connects to the address addr on the network net via the proxy.
// NOTE: must be the first dialer in a chain
func (s *Unix) Dial(network, addr string) (net.Conn, error) {
return net.Dial("unix", s.addr)
return s.dialer.Dial("unix", s.addr)
}
// DialUDP connects to the given address via the proxy.

View File

@ -52,7 +52,7 @@ func (s *Unix) ListenAndServeTCP() {
}
defer l.Close()
log.F("[unix] listening on %s", s.addr)
log.F("[unix] Listen on %s", s.addr)
for {
c, err := l.Accept()
@ -108,7 +108,7 @@ func (s *Unix) ListenAndServeUDP() {
s.ServePacket(c)
}
// ServePacket implementes proxy.PacketServer
// ServePacket implementes proxy.PacketServer.
func (s *Unix) ServePacket(pc net.PacketConn) {
if server, ok := s.server.(proxy.PacketServer); ok {
server.ServePacket(pc)
@ -123,6 +123,8 @@ func (s *Unix) ServePacket(pc net.PacketConn) {
continue
}
log.F("!!! unix ServePacker read from: %s", srcAddr)
var session *Session
sessionKey := srcAddr.String()