diff --git a/vendor.conf b/vendor.conf index a6d46c5f52..476a010406 100644 --- a/vendor.conf +++ b/vendor.conf @@ -23,7 +23,7 @@ github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5 github.com/imdario/mergo 0.2.1 #get libnetwork packages -github.com/docker/libnetwork 5537cb4b15c16eff2619db126ead3271e0ab45eb +github.com/docker/libnetwork bdc9dcea1a74443c61d4d156dfcece1df8105f13 github.com/docker/go-events 18b43f1bc85d9cdd42c05a6cd2d444c7a200a894 github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80 github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec diff --git a/vendor/github.com/docker/libnetwork/controller.go b/vendor/github.com/docker/libnetwork/controller.go index 4ab9929785..a62d4fb980 100644 --- a/vendor/github.com/docker/libnetwork/controller.go +++ b/vendor/github.com/docker/libnetwork/controller.go @@ -741,7 +741,9 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ... joinCluster(network) if !c.isDistributedControl() { + c.Lock() arrangeIngressFilterRule() + c.Unlock() } return network, nil diff --git a/vendor/github.com/docker/libnetwork/drivers/bridge/setup_ip_tables.go b/vendor/github.com/docker/libnetwork/drivers/bridge/setup_ip_tables.go index 0d4d549004..1ac7fbc808 100644 --- a/vendor/github.com/docker/libnetwork/drivers/bridge/setup_ip_tables.go +++ b/vendor/github.com/docker/libnetwork/drivers/bridge/setup_ip_tables.go @@ -115,7 +115,10 @@ func (n *bridgeNetwork) setupIPTables(config *networkConfiguration, i *bridgeInt n.portMapper.SetIptablesChain(natChain, n.getNetworkBridgeName()) } - if err := ensureJumpRule("FORWARD", IsolationChain); err != nil { + d.Lock() + err = ensureJumpRule("FORWARD", IsolationChain) + d.Unlock() + if err != nil { return err } diff --git a/vendor/github.com/docker/libnetwork/drivers/overlay/encryption.go b/vendor/github.com/docker/libnetwork/drivers/overlay/encryption.go index 2bf07b066d..b4c3aade49 100644 --- a/vendor/github.com/docker/libnetwork/drivers/overlay/encryption.go +++ b/vendor/github.com/docker/libnetwork/drivers/overlay/encryption.go @@ -138,6 +138,11 @@ func setupEncryption(localIP, advIP, remoteIP net.IP, vni uint32, em *encrMap, k logrus.Warn(err) } + err = programInput(vni, true) + if err != nil { + logrus.Warn(err) + } + for i, k := range keys { spis := &spi{buildSPI(advIP, remoteIP, k.tag), buildSPI(remoteIP, advIP, k.tag)} dir := reverse @@ -219,6 +224,35 @@ func programMangle(vni uint32, add bool) (err error) { return } +func programInput(vni uint32, add bool) (err error) { + var ( + port = strconv.FormatUint(uint64(vxlanPort), 10) + vniMatch = fmt.Sprintf("0>>22&0x3C@12&0xFFFFFF00=%d", int(vni)<<8) + plainVxlan = []string{"-p", "udp", "--dport", port, "-m", "u32", "--u32", vniMatch, "-j"} + ipsecVxlan = append([]string{"-m", "policy", "--dir", "in", "--pol", "ipsec"}, plainVxlan...) + block = append(plainVxlan, "DROP") + accept = append(ipsecVxlan, "ACCEPT") + chain = "INPUT" + action = iptables.Append + msg = "add" + ) + + if !add { + action = iptables.Delete + msg = "remove" + } + + if err := iptables.ProgramRule(iptables.Filter, chain, action, accept); err != nil { + logrus.Errorf("could not %s input rule: %v. Please do it manually.", msg, err) + } + + if err := iptables.ProgramRule(iptables.Filter, chain, action, block); err != nil { + logrus.Errorf("could not %s input rule: %v. Please do it manually.", msg, err) + } + + return +} + func programSA(localIP, remoteIP net.IP, spi *spi, k *key, dir int, add bool) (fSA *netlink.XfrmState, rSA *netlink.XfrmState, err error) { var ( action = "Removing" diff --git a/vendor/github.com/docker/libnetwork/drivers/overlay/ov_network.go b/vendor/github.com/docker/libnetwork/drivers/overlay/ov_network.go index d9edeccf88..173cd606d1 100644 --- a/vendor/github.com/docker/libnetwork/drivers/overlay/ov_network.go +++ b/vendor/github.com/docker/libnetwork/drivers/overlay/ov_network.go @@ -154,6 +154,7 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo d if !n.secure { for _, vni := range vnis { programMangle(vni, false) + programInput(vni, false) } } @@ -204,6 +205,7 @@ func (d *driver) DeleteNetwork(nid string) error { if n.secure { for _, vni := range vnis { programMangle(vni, false) + programInput(vni, false) } } diff --git a/vendor/github.com/docker/libnetwork/network.go b/vendor/github.com/docker/libnetwork/network.go index 2e529a23ec..e5c2eab173 100644 --- a/vendor/github.com/docker/libnetwork/network.go +++ b/vendor/github.com/docker/libnetwork/network.go @@ -1118,6 +1118,8 @@ func (n *network) addSvcRecords(name string, epIP net.IP, epIPv6 net.IP, ipMapUp return } + logrus.Debugf("(%s).addSvcRecords(%s, %s, %s, %t)", n.ID()[0:7], name, epIP, epIPv6, ipMapUpdate) + c := n.getController() c.Lock() defer c.Unlock() @@ -1151,6 +1153,8 @@ func (n *network) deleteSvcRecords(name string, epIP net.IP, epIPv6 net.IP, ipMa return } + logrus.Debugf("(%s).deleteSvcRecords(%s, %s, %s, %t)", n.ID()[0:7], name, epIP, epIPv6, ipMapUpdate) + c := n.getController() c.Lock() defer c.Unlock()