diff --git a/README.md b/README.md index db5e614..a35a6ab 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ The program will convert IPv4-only wireguard-interfaces to IPv6. It converts and IPv6-Adresses are generated based on the IPv4-Adress. +If not filtered out, then default routes (0.0.0.0/0) are handled specially and are converted to the IPv6 default route (::/0). + Beware: This program needs `NET_ADMIN` privileges for setting Adresses and to access the wireguard-daemon.
diff --git a/cmd/app/main.go b/cmd/app/main.go index 4baccd2..9bc07ed 100644 --- a/cmd/app/main.go +++ b/cmd/app/main.go @@ -17,6 +17,7 @@ import ( var envRequired = []string{ "INTERFACE", } + var envDefaults = map[string]string{ "IPV6_FORMAT": "fc12::%02x%02x:%02x%02x/%d", "FILTER_PREFIX": "100.100", @@ -111,7 +112,7 @@ func main() { for _, peer := range wgDevice.Peers { // Create slice for 1 expected addition - var addAllowedIPs = make([]net.IPNet, 0, 1) + addAllowedIPs := make([]net.IPNet, 0, 1) // Loop through the allowed-ips and add the ones starting with 100.100 for _, allowedIP := range peer.AllowedIPs { @@ -162,6 +163,13 @@ func main() { } func convertIPv4ToIPv6(ipv6Format *string, ipv4 *net.IPNet) *string { + // Check if this is a default route (0.0.0.0/0) + if ipv4.IP.Equal(net.IPv4zero) && ipv4.Mask.String() == net.IPMask(net.IPv4zero).String() { + defaultRoute := "::/0" + logger.Info.Printf("Converting default route %s to IPv6 default route %s", ipv4.String(), defaultRoute) + return &defaultRoute + } + CIDR, _ := ipv4.Mask.Size() // Run format ipv6Str := fmt.Sprintf(*ipv6Format, (*ipv4).IP[0], (*ipv4).IP[1], (*ipv4).IP[2], (*ipv4).IP[3], net.IPv6len*8-(net.IPv4len*8-CIDR))