It finally works as I want to. Know why people keep trying for days. There are some key issues missing on faq / doc / tutorial.
PFSense mobile ipsec vpn setup is somewhat like server and client and it suggest using aggressive mode due to unknown client ip. But some other doc said aggressive mode does some plaintext communication. I cannot totally understand but my setting below works in main mode:
IPCop settings towards the tutorial server side. It doesn't matter there is no separate setup page for mobile client and pre-shared keys.
PFSense setting as client. PSK in tunnel phase 1 page, that is sufficient.
IPCop's ID example is @domain that is key difference with PFSense that can be user define. However in PFSense putting @domain with define as dist.name simply cannot save settings. Username is ok, but racoon/PFsense somewhat looking for IPs when in main mode. So type define as non-IP is somewhat broken there. It looks impossible to re-setup the IP/ID every time as dynamic. Finally comparing IPCop with PFSense - the ID can be user define like shared keys. Fixed fake IP address there finally works.
Pluto/IPCop just send ID field no matter what's in it, but racoon needs IP-like string no matter type is defined in the setup page.
Some help on web says PFsense need another rules aloow * * for the IPSec tunnel and IPCop automatically fix the route table. I try deleting that and it still works.