Does OPNsense have a route back to your client?
$ niraami@OPNsense:~ % netstat -rRouting tablesInternet:Destination Gateway Flags Netif Expiredefault xxx-xxx-xxx-49.sta UGS vtnet0one.one.one.one xxx-xxx-xxx-49.sta UGHS vtnet0one.one.one.one xxx-xx-xxx.229 UGHS vtnet1dns.google xxx-xx-xxx.229 UGHS vtnet1dns.google xxx-xxx-xxx-49.sta UGHS vtnet0dns9.quad9.net xxx-xxx-xxx-49.sta UGHS vtnet010.9.0.0/16 link#5 U vtnet4OPNsense link#5 UHS lo010.10.0.0/16 link#3 U vtnet2OPNsense link#3 UHS lo0OPNsense link#2 UHS lo0xxx-xx-xxx.228/30 link#2 U vtnet1localhost link#8 UH lo0rpz-public-resolve xxx-xx-xxx.229 UGHS vtnet1172.16.10.0/24 172.16.10.2 UGS ovpns1172.16.10.1 link#11 UHS lo0172.16.10.2 link#11 UH ovpns1xxx-xxx-xxx.0/24 link#1 U vtnet0OPNsense link#1 UHS lo0resolver2.opendns. xxx-xxx-xxx-49.sta UGHS vtnet0resolver1.opendns. xxx-xx-xxx.229 UGHS vtnet1
# /usr/sbin/traceroute -w 2 -I -n -m '18' -s '10.10.254.2' '10.9.247.1'traceroute to 10.9.247.1 (10.9.247.1) from 10.10.254.2, 18 hops max, 48 byte packets 1 10.9.247.1 0.664 ms 0.542 ms 0.610 ms
$ ping 10.9.247.1PING 10.9.247.1 (10.9.247.1) 56(84) bytes of data.64 bytes from 10.9.247.1: icmp_seq=1 ttl=63 time=19.2 ms64 bytes from 10.9.247.1: icmp_seq=2 ttl=63 time=46.6 ms64 bytes from 10.9.247.1: icmp_seq=3 ttl=63 time=25.2 ms64 bytes from 10.9.247.1: icmp_seq=4 ttl=63 time=19.5 ms^C--- 10.9.247.1 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3004msrtt min/avg/max/mdev = 19.155/27.607/46.632/11.239 ms$ ping 10.10.1.3PING 10.10.1.3 (10.10.1.3) 56(84) bytes of data.64 bytes from 10.10.1.3: icmp_seq=1 ttl=63 time=22.6 ms64 bytes from 10.10.1.3: icmp_seq=2 ttl=63 time=23.3 ms64 bytes from 10.10.1.3: icmp_seq=3 ttl=63 time=22.0 ms64 bytes from 10.10.1.3: icmp_seq=4 ttl=63 time=54.2 ms^C--- 10.10.1.3 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3004msrtt min/avg/max/mdev = 22.008/30.550/54.213/13.669 ms