Add compatibility with docker bridge
This commit is contained in:
parent
a9027729be
commit
a36276922a
3 changed files with 275 additions and 2 deletions
|
|
@ -9,7 +9,7 @@ import (
|
|||
"github.com/sagernet/nftables"
|
||||
"github.com/sagernet/nftables/binaryutil"
|
||||
"github.com/sagernet/nftables/expr"
|
||||
"github.com/sagernet/sing-tun/internal/gtcpip/header"
|
||||
"github.com/sagernet/sing-tun/gtcpip/header"
|
||||
"github.com/sagernet/sing/common"
|
||||
"github.com/sagernet/sing/common/control"
|
||||
E "github.com/sagernet/sing/common/exceptions"
|
||||
|
|
@ -295,11 +295,15 @@ func (r *autoRedirect) setupNFTables() error {
|
|||
if err != nil {
|
||||
return E.Cause(err, "configure openwrt firewall4")
|
||||
}
|
||||
|
||||
err = nft.Flush()
|
||||
if err != nil {
|
||||
return E.Cause(err, "flush nftables")
|
||||
}
|
||||
r.startDockerFirewallMonitor()
|
||||
err = r.configureDockerFirewall(false)
|
||||
if err != nil && r.logger != nil {
|
||||
r.logger.Warn("configure docker firewall: ", err)
|
||||
}
|
||||
|
||||
r.networkListener = r.networkMonitor.RegisterCallback(func() {
|
||||
err = r.nftablesUpdateLocalAddressSet()
|
||||
|
|
@ -373,6 +377,7 @@ func (r *autoRedirect) cleanupNFTables() {
|
|||
if r.networkListener != nil {
|
||||
r.networkMonitor.UnregisterCallback(r.networkListener)
|
||||
}
|
||||
r.stopDockerFirewallMonitor()
|
||||
nft, err := nftables.New()
|
||||
if err != nil {
|
||||
return
|
||||
|
|
@ -384,6 +389,10 @@ func (r *autoRedirect) cleanupNFTables() {
|
|||
_ = r.configureOpenWRTFirewall4(nft, true)
|
||||
_ = nft.Flush()
|
||||
_ = nft.CloseLasting()
|
||||
err = r.configureDockerFirewall(true)
|
||||
if err != nil && r.logger != nil {
|
||||
r.logger.Warn("cleanup docker firewall: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *autoRedirect) nftablesCreatePreMatchChains(nft *nftables.Conn, table *nftables.Table) error {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue