Conversão inválida de "void *" para "char não assinado"

Eu tenho o seguinte código;

void* buffer = operator new(100);
unsigned char* etherhead = buffer;

Estou recebendo o seguinte erro para essa linha ao tentar compilar;

error: invalid conversion from ‘void*’ to ‘unsigned char*’

Por que eu recebo esse erro, achei que um vazio era "sem tipo", então ele pode apontar para qualquer coisa, ou qualquer coisa pode apontar para ele?