Skip to content

Commit 446b688

Browse files
committed
Limited bridge netfilter application.
libnetwork uses the br-netfilter module to allow filtering of packets passing through a bridge. To do so, it sets /proc/sys/net/bridge/bridge-nf-call-ip[6]tables to 1, forcing iptables for every bridge on the system, whether this is desired or not. This overrides anything set in /etc/sysctl.conf. This change prevents libnetwork from setting the system-wide /proc/sys/net/bridge/bridge-nf-call-ip[6]tables and instead sets /sys/class/net/<bridge-name>/bridge/nf_call_ip[6]tables for each bridge which has ICC disabled. Note that this does introduce a change in the behaviour of docker. For a default network configuration, with the existing behaviour, both `docker_gwbridge` and `docker0` bridges have iptables enabled while this change results in `docker_gwbridge` having iptables enabled but `docker0` having iptables disabled, because ICC is enabled by default. As far as I can tell, iptables should not be enabled on the `docker0` bridge when ICC is enabled (the code which implements this seems to assume that iptables is enabled per-bridge and not systemwide) so I think this change is correct, but it is still a change in behaviour. Signed-off-by: Tom Cook <tom.k.cook@gmail.com>
1 parent feeff4f commit 446b688

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

drivers/bridge/setup_bridgenetfiltering.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ func checkBridgeNetFiltering(config *networkConfiguration, i *bridgeInterface) e
6464
if err != nil {
6565
logrus.Warnf("failed to check %s forwarding: %v", ipVerName, err)
6666
} else if enabled {
67-
enabled, err := getKernelBoolParam(getBridgeNFKernelParam(ipVer))
67+
enabled, err := getKernelBoolParam(getBridgeNFKernelParam(ipVer, iface))
6868
if err != nil || enabled {
6969
return err
7070
}
71-
return setKernelBoolParam(getBridgeNFKernelParam(ipVer), true)
71+
return setKernelBoolParam(getBridgeNFKernelParam(ipVer, iface), true)
7272
}
7373
return nil
7474
}
@@ -108,12 +108,12 @@ func getForwardingKernelParam(ipVer ipVersion, iface string) string {
108108

109109
// Get kernel param path saying whether bridged IPv${ipVer} traffic shall be
110110
// passed to ip${ipVer}tables' chains.
111-
func getBridgeNFKernelParam(ipVer ipVersion) string {
111+
func getBridgeNFKernelParam(ipVer ipVersion, bridgeName string) string {
112112
switch ipVer {
113113
case ipv4:
114-
return "/proc/sys/net/bridge/bridge-nf-call-iptables"
114+
return fmt.Sprintf("/sys/class/net/%s/bridge/nf_call_iptables", bridgeName)
115115
case ipv6:
116-
return "/proc/sys/net/bridge/bridge-nf-call-ip6tables"
116+
return fmt.Sprintf("/sys/class/net/%s/bridge/nf_call_ip6tables", bridgeName)
117117
default:
118118
return ""
119119
}

0 commit comments

Comments
 (0)