Strange IPv4 - IPv6 issue on Arduino framework since 2025.7.3 is this a bug?

One of my ESP32-S2 devices, which due to accessibility is not yet converted to ESP-IDF but is still running on the Arduino framework, has a strange IP issue since it has been updated from ESPHome 2025.6.3 to ESPHome 2025.7.3
Somehow the ESP sometimes gets an unknown IPv6 address!

On all my ESP devices I have the IPv4 address set as fixed, defined in secrets.yaml.
And by default I always have the WiFi Info Text Sensor activated on all my ESP devices, including the IP-address, and the logging is normally set to level DEBUG.

This are the parts from the current ESPHome Yaml code that might be related to this issue:

esp32:
  board: lolin_s2_mini
  variant: esp32s2
  framework:
    type: arduino

substitutions:
  friendly_name: S2V10-01
  sys_name: s2v10_01

logger:
  level: DEBUG

api:
  encryption:
    key: !secret esph_api_encryption_key

ota:
  platform: esphome
  password: !secret pwd_ota_s2v10_01

wifi:
  networks:
  - ssid: !secret ssid_iot_wlan2
    password: !secret pwd_iot_wlan2
    bssid: !secret bssid_iot_ap3
  - ssid: !secret ssid_iot_wlan2
    password: !secret pwd_iot_wlan2
    bssid: !secret bssid_iot_ap1
  - ssid: !secret ssid_iot_wlan2
    password: !secret pwd_iot_wlan2
    bssid: !secret bssid_iot_ap2
  domain: !secret ip_domain
  manual_ip:
    static_ip: !secret ip_esp_s2v10_1
    gateway: !secret ip_gateway
    subnet: !secret ip_subnet
    dns1: !secret ip_dns1
    dns2: !secret ip_dns2

  ap:
    ssid: !secret ssid_fbap_wlan_s2v10_01
    password: !secret pwd_fbap_wlan_s2v10_01

web_server:
  port: !secret port_websrv
  auth:
    username: !secret user_websrv
    password: !secret pwd_websrv
  version: 3
  local: true

captive_portal:

text_sensor:
  - platform: wifi_info
    ip_address:
      name: ${friendly_name} IP Address

Normally the IP address sensor status is not shown in the logs, but is only visible in the HA interface.
But after updating this ESP device I now see many instances of the IP-address output in the log, like once a second or so.
And even more strange is that every now and then sometimes I see IPv6 addresses appearing.
This are some log snippets showing this:

[09:15:14][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:15][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:18][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:19][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:23][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state 'c0a8:7cf3:230a:600::200a:600'
[09:15:24][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:26][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:27][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:28][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:29][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:30][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:31][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:32][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:33][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:34][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:35][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:36][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:46][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:47][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:48][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:49][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:15:50][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'

[09:45:51][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:45:52][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:45:54][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state 'c0a8:7cf3:6cef:fd3f:cde:fe3f:e00:0'
[09:45:55][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'

[09:47:00][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:47:01][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:47:02][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:47:03][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:47:04][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[09:47:05][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state 'c0a8:7cf3:60e2:fd3f:84e2:fd3f:679:1e00'
[09:47:06][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'

For debugging I then changed the logging level to VERY_VERBOSE with this as some related results from the logs:

[12:04:28][V][text_sensor:015]: 'S2V10-01 IP Address': Received new state 192.168.124.243
[12:04:28][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[12:04:28][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:28][VV][api.service:013]:   key: 3851178666
[12:04:28][VV][api.service:013]:   state: '192.168.124.243'
[12:04:28][VV][api.service:013]:   missing_state: NO
[12:04:28][VV][api.service:013]:   device_id: 0
[12:04:28]}
[12:04:28][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:28][VV][api.service:013]:   key: 3851178666
[12:04:28][VV][api.service:013]:   state: '192.168.124.243'
[12:04:28][VV][api.service:013]:   missing_state: NO
[12:04:28][VV][api.service:013]:   device_id: 0
[12:04:28]}

[12:04:32][V][text_sensor:015]: 'S2V10-01 IP Address': Received new state 192.168.124.243
[12:04:32][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[12:04:32][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:32][VV][api.service:013]:   key: 3851178666
[12:04:32][VV][api.service:013]:   state: '192.168.124.243'
[12:04:32][VV][api.service:013]:   missing_state: NO
[12:04:32][VV][api.service:013]:   device_id: 0
[12:04:32]}
[12:04:32][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:32][VV][api.service:013]:   key: 3851178666
[12:04:32][VV][api.service:013]:   state: '192.168.124.243'
[12:04:32][VV][api.service:013]:   missing_state: NO
[12:04:32][VV][api.service:013]:   device_id: 0
[12:04:32]}

[12:04:35][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:35][VV][api.service:013]:   key: 3851178666
[12:04:35][VV][api.service:013]:   state: '192.168.124.243'
[12:04:35][VV][api.service:013]:   missing_state: NO
[12:04:35][VV][api.service:013]:   device_id: 0
[12:04:35]}
[12:04:35][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:35][VV][api.service:013]:   key: 3851178666
[12:04:35][VV][api.service:013]:   state: '192.168.124.243'
[12:04:35][VV][api.service:013]:   missing_state: NO
[12:04:35][VV][api.service:013]:   device_id: 0
[12:04:35]}
[12:04:35][VV][api.connection:190]: Sending keepalive PING
[12:04:35][VV][api.service:013]: send_message ping_request: PingRequest {}
[12:04:35][VV][api.service:068]: on_ping_response: PingResponse {}
[12:04:36][V][text_sensor:015]: 'S2V10-01 IP Address': Received new state c0a8:7cf3:230a:600::200a:600
[12:04:36][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state 'c0a8:7cf3:230a:600::200a:600'
[12:04:36][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:36][VV][api.service:013]:   key: 3851178666
[12:04:36][VV][api.service:013]:   state: 'c0a8:7cf3:230a:600::200a:600'
[12:04:36][VV][api.service:013]:   missing_state: NO
[12:04:36][VV][api.service:013]:   device_id: 0
[12:04:36]}
[12:04:36][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:36][VV][api.service:013]:   key: 3851178666
[12:04:36][VV][api.service:013]:   state: 'c0a8:7cf3:230a:600::200a:600'
[12:04:36][VV][api.service:013]:   missing_state: NO
[12:04:36][VV][api.service:013]:   device_id: 0
[12:04:36]}
[12:04:37][V][text_sensor:015]: 'S2V10-01 IP Address': Received new state 192.168.124.243
[12:04:37][D][text_sensor:069]: 'S2V10-01 IP Address': Sending state '192.168.124.243'
[12:04:37][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:37][VV][api.service:013]:   key: 3851178666
[12:04:37][VV][api.service:013]:   state: '192.168.124.243'
[12:04:37][VV][api.service:013]:   missing_state: NO
[12:04:37][VV][api.service:013]:   device_id: 0
[12:04:37]}
[12:04:37][VV][api.service:013]: send_message text_sensor_state_response: TextSensorStateResponse {
[12:04:37][VV][api.service:013]:   key: 3851178666
[12:04:37][VV][api.service:013]:   state: '192.168.124.243'
[12:04:37][VV][api.service:013]:   missing_state: NO
[12:04:37][VV][api.service:013]:   device_id: 0

I am not using IPv6 at all at the moment in my local network.
In Home Assistant I have IPv6 on Automatic enabled, but that is only for Matter, and there is only a link-local fe80 address defined.
It looks like the IP address is re-determined on the ESP device like every second.

This are some of the IPv6 addresses that were shown:

c0a8:7cf3:230a:600::200a:600
c0a8:7cf3:6cef:fd3f:cde:fe3f:e00:0
c0a8:7cf3:60e2:fd3f:84e2:fd3f:679:1e00

Originally I thought that this ESP device was somehow connecting to a neighbour access point and been given an IPv6 address, but that would be very strange of course.
But it appears that the given IPv6 addresses are based on the IPv4 address!
The first two groups of these IPv6 addresses are in fact the IPv4 address transferred from decimal to hex numbers.

c0a8:7cf3 = 192.168.124.243

It however is not clear what the other hex numbers are.

Anyhow, this must be happening in the ESPHome code itself?
Has anybody else seen this?
I cannot find anything related to IPv4 or IPv6 in the ESPHome release notes since 2025.6.3, but can this be a recently introduced bug?

IPv6 is a protocol that are much more autonomous than IPv4.
What you see is a device that create its own EUD64 address for IPv6 communication.

Thank you, but I think you are incorrect.
The site that you are linking to is about the EUI-64 or IPv6 link-local address.
This link-local address is not based on an IPv4 address, but on the MAC address.
In my case the MAC address is 84:F7:03:D7:F3:3A which translates to the IPv6 link-local address fe80::86f7:03ff:fed7:f33a
And those link-local IPv6 addresses always start with fe80::
I cannot find anything IPv6 related that points to EUD64, so was that a typo?

There appear to be methods to create an IPv6 address based on an IPv4 address, specifically meant for the IPv4 to IPv6 transition, but in those cases the IPv4 address is always placed on the end of the IPv6 address.
And in my case the IPv6 address starts with the IPv4 address in hex format.
So I think it is still unclear as to what is happening here in my case.

I suspect you are seeing an impact from the upgrade to the new Arduino framework:

There are many types if IPv6 address scopes, formats and ranges.

That might very well be the case.
But unfortunately I cannot find anything about this strange IPv6 format in these release notes nor in the Arduino 2.x to 3.0 migration guides:

Arduino Release v3.1.3 based on ESP-IDF v5.3

ESP32: Migrating from version 2.x to 3.0 (Arduino IDE)

Migration from 2.x to 3.0

So there are still two questions remaining:

  • Why is the log spawned with those IP address entries, like every second
  • Why are these strange IPv6 addresses appearing every now and then

In the coming days I will be converting this ESP device to the ESP-IDF framework, but it is an intriguing issue, so if anybody knows more about this then please let us know.

Yes, I did see that Wikipedia article, but none of the shown formats appear to follow the format for my case: starting the IPv6 address with the IPv4 address in hex.

An update to this issue: I tried several changes to the ESPHome yaml code, but none did make any difference.
What I did try:

First, I updated ESPHome to 2025.7.4 but that did not make any difference for this issue.

To be sure the problem wasn’t caused by using the secrets.yaml file for providing the fixed ipv4 address I changed the code to locally defined ipv4 addresses for the device, including the gateway, the subnet and the DNS servers:

  manual_ip:
    static_ip: 192.168.124.243
    gateway: 192.168.124.1
    subnet: 255.255.254.0
    dns1: 192.168.123.70
    dns2: 192.168.123.80

This did not make any difference.

Although ipv6 should be disabled by default, I then added the specific network: component with ipv6 disabled (which is the default setting):

network:
    enable_ipv6: false
    min_ipv6_addr_count: 0

This did not make a difference either.
So although ipv6 is disabled by default, the ESP device is creating ipv6 addresses.

Then I updated the Arduino framework version to latest, which currently is Arduino Release v3.3.0 based on ESP-IDF v5.5.0:

esp32:
  board: lolin_s2_mini
  variant: esp32s2
  framework:
    type: arduino
    version: latest

This did not make a difference either: still ipv4 updates every second and ipv6 every now and then.

As last test I want to revert back to the old Arduino Release 2.x framework, to see whether the problem is going away again.
But unfortunately I cannot find which version that was exactly. In the ESPHome install logs (ESPHome 2025.6.0 from June this year) it is only shown like this:

Processing s2v10-01 (board: lolin_s2_mini; framework: arduino; platform: platformio/[email protected])

So it was based on ESP-IDF v5.4.0 but what was the Arduino Framework version? Who can tell me what the default Arduino Framework version was for ESPHome version 2025.6.x?

Up to now nobody else has confirmed this problem to occur with ESPHome 2025.7.x and the Arduino framework.
Am I really the only user seeing this?

I am thinking about creating a GitHub issue for this, but am not sure where this should be done.
Is this an issue with the ESPHome code, or is this an issue with the Espressif arduino-esp32 code?

For reference one more update on this issue.
I think I found out what the previous version of the Arduino framework version was, as used by ESPHome 2025.6.3
In the ESPHome version 2025.6.3 code on GitHub, in the file platform.ini this is shown:

[common:esp32-arduino]
extends = common:arduino
platform = platformio/[email protected]
platform_packages =
    platformio/framework-arduinoespressif32@~3.20005.0

Following the platformio website this probably is Arduino framework version 2.0.5

So I did try to use ESPHome 2025.7.4 with Arduino framework version 2.0.5

esp32:
  board: lolin_s2_mini
  variant: esp32s2
  framework:
    type: arduino
    version: 2.0.5

But it appeared that it is not possible to use Arduino framework version 2.0.5 with ESPHome version 2025.7.4 because the install failed like that.

Since nobody else has reported this problem with those strange IPv4 and IPv6 issues here in the forum I have to assume that I am the only one being troubled with this.
So I decided not to go further with this, and not to report this on GitHub.

So I have now changed from the Arduino framework to the ESP-IDF framework, and indeed everything is back to normal again. Case closed I would say.

Without further investigation I would expect 3.2.0

Others might just not have looked at their IPv6 address and then there is the chance that it is your network somehow too, because IPv6 auto-assign addresses based on network discoveries.

If anyone should know what is happening in ESPHome, then it is HeMan. He made a lot of the IPv6 stuff in ESPHome.

If you would have followed the link you would have seen this:

Although I am not 100%, it is unlikely to be caused by my own network.
Like I wrote, I am not using IPv6 at all currently in my local network.
Only HA has IPv6 enabled specifically for Matter, and only has a link-local IPv6 address. There are no global (routeable) IPv6 addresses at all in my network, and there is no IPv6 Gateway defined.
The strange IPv6 addresses that were created by ESPHome were global addresses.
And if it is caused somehow by my network, then why is the problem gone now that I have the Arduino framework changed to the ESP-IDF framework (as only change)?

IPv6 use a lot of methods to make up addresses and just because you did not activate it the devices can still use information for addresses.

But I didn’t, which I said. My bad.
And I didn’t expect esphome was using 3years old 2.0 until 2025.7

I’m also seeing this behaviour - strange IPv6 addresses briefly reported (quickly replaced by the correct IPv4 address), but I’m not asking for them, nor is my DHCP server configured for IPv6. I’m not messing around with platform versions or setting the network key.

esp32:
  board: esp32dev
  framework:
    type: arduino

Has anyone resolved this? It doesn’t appear to have any other impact than log spam, but it is rather odd.

What are the IPv6 addresses you are seeing.
IPv6 is designed to use several different methods to get an IPv6 address and many of them does not require a router at all.

Thanks for reporting.

Can you please check whether these IPv6 addresses are also based on the IPv4 address?
For clarity: in my case the first two groups of the IPv6 address were a hexadecimal representation of the IPv4 address, like shown in my original post:

c0a8:7cf3 = 192.168.124.243

And do you also get these IP address entries like every second in the log?

Thanks both. Yes and yes. Here are some recent log entries:

Changed to 10.0.0.91
Changed to a00:5b:1020:fb3f:3020:fb3f:1c48:fb3f
Changed to 10.0.0.91
Changed to a00:5b:1020:fb3f:3020:fb3f::
Changed to 10.0.0.91
Changed to a00:5b:1020:fb3f:3020:fb3f::
Changed to 10.0.0.91
...

0a00:005b = 10.0.0.91, so it checks out. I know next to nothing about IPv6, so the remaining digits don’t mean much to me. Timing is quite random - can be as frequent as 2 minutes or irregular as 30 minutes. IPv6 addresses only ever appears for a second or so before it is replaced by the IPv4 variant.

My guess it is not changed from IPv4 to IPv6 or the other way around.
IPv6 and IPv4 can and do co-exist on a device and what you are seeing is probably just the device reconnecting to the network and then getting an IPv6 address first (IPv6 actions are prioritized over IPv4) and after that it gets an IPv4 address.
The device then have both addresses.