Las IP locales tienen un rango definido, al igual que las publicas:
https://en.wikipedia.org/wiki/Reserved_IP_addresses
en base a eso puedes deducir si es local o no. Obvio hay escenarios (como prosas y vpns) que pueden distorsionar esa info. Adicionalmente si tienes control sobre los clientes les puedes hacer que envíe una "cabecera" con sun ip local (similar a como es el encabezado HOST en http) para extra validación.
Pero no olvides que es solo seria real si no hay intentos de "ocultar" la ip de parte de los clientes.