mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-06-13 21:54:13 +08:00
Add ability to use wireguard wg utility in sing-box containers
This commit is contained in:
parent
285af41309
commit
a42d748a0b
@ -22,6 +22,7 @@ LABEL maintainer="nekohasekai <contact-git@sekai.icu>"
|
|||||||
RUN set -ex \
|
RUN set -ex \
|
||||||
&& apk upgrade \
|
&& apk upgrade \
|
||||||
&& apk add bash tzdata ca-certificates nftables \
|
&& apk add bash tzdata ca-certificates nftables \
|
||||||
|
&& apk add wireguard-tools \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
COPY --from=builder /go/bin/sing-box /usr/local/bin/sing-box
|
COPY --from=builder /go/bin/sing-box /usr/local/bin/sing-box
|
||||||
ENTRYPOINT ["sing-box"]
|
ENTRYPOINT ["sing-box"]
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/sagernet/sing/service/pause"
|
"github.com/sagernet/sing/service/pause"
|
||||||
"github.com/sagernet/wireguard-go/conn"
|
"github.com/sagernet/wireguard-go/conn"
|
||||||
"github.com/sagernet/wireguard-go/device"
|
"github.com/sagernet/wireguard-go/device"
|
||||||
|
"github.com/sagernet/wireguard-go/ipc"
|
||||||
|
|
||||||
"go4.org/netipx"
|
"go4.org/netipx"
|
||||||
)
|
)
|
||||||
@ -167,6 +168,14 @@ func (e *Endpoint) Start(resolve bool) error {
|
|||||||
} else if resolve {
|
} else if resolve {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileUAPI, uapiErr := func() (*os.File, error) {
|
||||||
|
return ipc.UAPIOpen(e.options.Name) // should be something like wg0
|
||||||
|
}()
|
||||||
|
if uapiErr != nil {
|
||||||
|
return fmt.Errorf("UAPI listen error: %v", uapiErr)
|
||||||
|
}
|
||||||
|
|
||||||
var bind conn.Bind
|
var bind conn.Bind
|
||||||
wgListener, isWgListener := e.options.Dialer.(conn.Listener)
|
wgListener, isWgListener := e.options.Dialer.(conn.Listener)
|
||||||
if isWgListener {
|
if isWgListener {
|
||||||
@ -204,6 +213,22 @@ func (e *Endpoint) Start(resolve bool) error {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
wgDevice := device.NewDevice(e.options.Context, e.tunDevice, bind, logger, e.options.Workers)
|
wgDevice := device.NewDevice(e.options.Context, e.tunDevice, bind, logger, e.options.Workers)
|
||||||
|
|
||||||
|
uapi, err := ipc.UAPIListen(e.options.Name, fileUAPI)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to listen on uapi socket: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
conn, err := uapi.Accept()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
go wgDevice.IpcHandle(conn)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
e.tunDevice.SetDevice(wgDevice)
|
e.tunDevice.SetDevice(wgDevice)
|
||||||
ipcConf := e.ipcConf
|
ipcConf := e.ipcConf
|
||||||
for _, peer := range e.peers {
|
for _, peer := range e.peers {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user