diff --git a/libnetwork/drivers/bridge/setup_ip_tables.go b/libnetwork/drivers/bridge/setup_ip_tables.go index bd2822e39cab9..f53d0a93ae988 100644 --- a/libnetwork/drivers/bridge/setup_ip_tables.go +++ b/libnetwork/drivers/bridge/setup_ip_tables.go @@ -397,15 +397,21 @@ func removeIPChains(version iptables.IPVersion) { } func setupInternalNetworkRules(bridgeIface string, addr *net.IPNet, icc, insert bool) error { - var ( - inDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{"-i", bridgeIface, "!", "-d", addr.String(), "-j", "DROP"}} - outDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{"-o", bridgeIface, "!", "-s", addr.String(), "-j", "DROP"}} - ) - - version := iptables.IPv4 - - if addr.IP.To4() == nil { + var version iptables.IPVersion + var inDropRule, outDropRule iptRule + + if addr.IP.To4() != nil { + version = iptables.IPv4 + inDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{ + "-i", bridgeIface, "!", "-d", addr.String(), "-j", "DROP"}} + outDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{ + "-o", bridgeIface, "!", "-s", addr.String(), "-j", "DROP"}} + } else { version = iptables.IPv6 + inDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{ + "-i", bridgeIface, "!", "-o", bridgeIface, "!", "-d", addr.String(), "-j", "DROP"}} + outDropRule = iptRule{table: iptables.Filter, chain: IsolationChain1, args: []string{ + "!", "-i", bridgeIface, "-o", bridgeIface, "!", "-s", addr.String(), "-j", "DROP"}} } if err := programChainRule(version, inDropRule, "DROP INCOMING", insert); err != nil { @@ -414,6 +420,7 @@ func setupInternalNetworkRules(bridgeIface string, addr *net.IPNet, icc, insert if err := programChainRule(version, outDropRule, "DROP OUTGOING", insert); err != nil { return err } + // Set Inter Container Communication. return setIcc(version, bridgeIface, icc, insert) }