Fix routing between containers on same host
This commit is contained in:
parent
0618b41ae2
commit
4012686925
28
main.go
28
main.go
@ -150,13 +150,13 @@ func getMyceliumIP(interfaceName string) (net.IP, error) {
|
||||
func generateContainerIP(myceliumPrefix net.IP, containerID string) net.IP {
|
||||
// Generate a unique container IP within the /64 prefix using container ID hash
|
||||
hash := sha256.Sum256([]byte(containerID))
|
||||
|
||||
|
||||
containerIP := make(net.IP, len(myceliumPrefix))
|
||||
copy(containerIP, myceliumPrefix)
|
||||
|
||||
|
||||
// Use first 8 bytes of hash for the host part (last 64 bits)
|
||||
copy(containerIP[8:], hash[:8])
|
||||
|
||||
|
||||
return containerIP
|
||||
}
|
||||
|
||||
@ -259,8 +259,28 @@ func configureContainerInterface(containerNS netns.NsHandle, ifName string, cont
|
||||
}
|
||||
|
||||
if hostLLAddr != nil {
|
||||
// Add route to Mycelium network via host veth
|
||||
// First remove any existing route to our /64
|
||||
myceliumPrefix := &net.IPNet{
|
||||
IP: containerIP.Mask(net.CIDRMask(64, 128)),
|
||||
Mask: net.CIDRMask(64, 128),
|
||||
}
|
||||
existingRoute := &netlink.Route{
|
||||
Dst: myceliumPrefix,
|
||||
}
|
||||
netlink.RouteDel(existingRoute)
|
||||
|
||||
// Add route to our /64 via host veth
|
||||
route := &netlink.Route{
|
||||
Dst: myceliumPrefix,
|
||||
Gw: hostLLAddr,
|
||||
LinkIndex: link.Attrs().Index,
|
||||
}
|
||||
if err := netlink.RouteAdd(route); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Add route to Mycelium network via host veth
|
||||
route = &netlink.Route{
|
||||
Dst: &net.IPNet{
|
||||
IP: net.ParseIP("400::"),
|
||||
Mask: net.CIDRMask(7, 128),
|
||||
|
Loading…
Reference in New Issue
Block a user