ESX 4 (and this also applies to ESX 3.5) uses version 4 of the Network Time Protocol by default and will not synchronize with 3Com switches and routers running 3Com Comware 5, e.g. the 5500G switch and the MSR router series. The symptoms are that the ESX host sends NTP queries to the 3Com device, but the 3Com device remains silent, issuing no responses. The problem is that the 3Com devices support NTP up to version 3, but not version 4. 3Com Tech Support told me that NTP version 4 is not currently on the product roadmap, but has been submitted as a feature request.
There is a fairly simple workaround, however. First configure NTP using the vSphere client in the usual manner:
Select the ESX host, and then click on its Configuration tab and then on the Time Configuration link.
Click on Properties..., check NTP Client Enabled, and click Options.
On the General tab, be sure that the NTP service is set to start automatically.
On the NTP Settings tab, add the IP address of the 3Com switch(es) and/or router(s) to be used as NTP servers.
Check Restart NTP service to apply changes, then OK, and OK.
Now since the ESX server will be sending out queries using NTP version 4 and the 3Com devices are expecting at most version 3, the 3Com devices will not respond, and the ESX server will not synchronize. To fix this, log onto the console of the ESX server:
Stop the NTP service with the command service ntpd stop.
Use nano or your favorite text editor to edit the file /etc/ntp.conf.
One or more of the lines will read SERVER w.x.y.z where w.x.y.z is the IP address of the corresponding 3Com device.
Modify these lines so that they read SERVER w.x.y.z VERISON 3. This will cause the NTP client to issue its queries to that device using NTP version 3 rather than the default version 4.
Save the file and exit the editor.
Then start the NTP service with service ntpd start. When starting the service, it may indicate that synchronization has failed.
If you wait a few minutes, you can use the command ntptrace localhost to verify that the NTP client has in fact ultimately synchronized.
With the NTP service stopped, you can test it with the command ntpd -d -q. After you have modified ntp.conf as above, you should see messages showing queries and responses between the ESX host and the 3Com NTP server. After a few minutes, ntpd should exit indicating that the NTP client has synchronized, but the messages are admittedly somewhat cryptic. Contrast this with the messages you will see before you edit ntp.conf, where there will be no responses from the 3Com device to NTP queries.
Another useful troubleshooting step to see what has been happening with NTP is to examine the message log: cat /var/log/messages | grep ntpd.