Eu fiz uma experiência e shell_exec() está usando sh , como @thrig suspeitou em seu comentário acima. Na sua Synology Diskstation, /bin/sh pode não ser realizado usando bash (ou algo que suporte /dev/tcp/... ).
Uma variação disso parece funcionar para mim:
shell_exec("bash -c 'echo foobar > /dev/tcp/192.168.178.41/8080'")