Это не работает по той же причине, что и переадресация портов в одной локальной сети, как правило, не работает. Другими словами, это ситуация шпильки-NAT. (Представьте себе туннель, как если бы он был просто локальной сетью локальной сети.)
Сам туннель может работать нормально - пакет достигает X, получает NAT и возвращается в Y. Однако, поскольку Y видит исходного отправителя как локального, ответ не проходит через X и, следовательно, X не может отменить NAT. В результате адреса в ответе не совпадают с адресами в исходном пакете, и Y (как исходный инициатор) не может найти подходящее соединение для ответа, который он только что получил.
Попробуйте добавить в iptables правило -t nat -I PREROUTING -d x.x.x.x --dport N -j REDIRECT
для обработки этого случая - оно должно перехватывать исходящие пакеты без необходимости задействовать X вообще.