Если в кратце, то как правильно сказал rjhdby тебе нужен ipsec, а точнее site-to-site vpn. На фре я это не делал, но в кратце теория такова:
Отправляем пакет из сети А отправляется в сеть Б.
На шлюзе А все пакеты до сети Б исключаются из НАТ.
Соответственно шлюз пытается отправить пакет с SRC-IP заголовком приватной сети А.
Тут то вступает в дело IPsec, он криптует пакет, навешивает свой дополнительный SRC-IP с публичным IP адресом.
На принимающей стороне происходит ровно обратное, удаляется первый заголовок, пакет декриптуется, и выглядет как-будто пришел из приватной сети А в приватную сеть Б.
Все, осталось только указать Шлюзу А что сеть Б находится за публичным IP шлюза Б.
Точнее это уже указано директивой remote ххх.ххх.ххх.ххх в настройках racoon.
(естественно на стороне Б делается ровно зеркальная процедура. и так же естественно что racoon надо указать какой именно трафик улетающий с публичного интерфейса надо прогонять через ipsec)
Profit!