@@ -66,9 +66,6 @@ func GetMachinePreferredIPAddress(machine *infrav1.VSphereMachine) (string, erro
66
66
}
67
67
68
68
for _ , machineAddr := range machine .Status .Addresses {
69
- if machineAddr .Type != clusterv1 .MachineExternalIP {
70
- continue
71
- }
72
69
if cidr == nil {
73
70
return machineAddr .Address , nil
74
71
}
@@ -258,3 +255,41 @@ func MachinesAsString(machines []*clusterv1.Machine) string {
258
255
}
259
256
return message
260
257
}
258
+
259
+ // IsInternalIP checks if the IP is private/internal.
260
+ func IsInternalIP (ip string ) bool {
261
+ netIP := net .ParseIP (ip )
262
+ if netIP == nil {
263
+ return false
264
+ }
265
+
266
+ privateBlocks := []* net.IPNet {
267
+ {IP : net .IPv4 (10 , 0 , 0 , 0 ), Mask : net .CIDRMask (8 , 32 )}, // 10.0.0.0/8
268
+ {IP : net .IPv4 (172 , 16 , 0 , 0 ), Mask : net .CIDRMask (12 , 32 )}, // 172.16.0.0/12
269
+ {IP : net .IPv4 (192 , 168 , 0 , 0 ), Mask : net .CIDRMask (16 , 32 )}, // 192.168.0.0/16
270
+ {IP : net .IPv4 (127 , 0 , 0 , 1 ), Mask : net .CIDRMask (8 , 32 )}, // 127.0.0.0/8 (loopback)
271
+ {IP : net .IPv4 (169 , 254 , 0 , 0 ), Mask : net .CIDRMask (16 , 32 )}, // 169.254.0.0/16 (link-local)
272
+ }
273
+
274
+ // Check IPv4 private ranges
275
+ for _ , block := range privateBlocks {
276
+ if block .Contains (netIP ) {
277
+ return true
278
+ }
279
+ }
280
+
281
+ // Check IPv6 private ranges
282
+ privateIPv6Blocks := []* net.IPNet {
283
+ {IP : net .ParseIP ("::1" ), Mask : net .CIDRMask (128 , 128 )}, // Loopback
284
+ {IP : net .ParseIP ("fc00::" ), Mask : net .CIDRMask (7 , 128 )}, // Unique Local Addresses (ULA)
285
+ {IP : net .ParseIP ("fe80::" ), Mask : net .CIDRMask (10 , 128 )}, // Link-local
286
+ }
287
+
288
+ for _ , block := range privateIPv6Blocks {
289
+ if block .Contains (netIP ) {
290
+ return true
291
+ }
292
+ }
293
+
294
+ return false
295
+ }
0 commit comments