Настройка туннеля между двумя сетями на FreeBSD.

Дано: Две сети которые необходимо объеденить через туннель. Оддна из сетей подключенна к Интернету через сервер с FreeBSD, вторая сеть через ADSL модем. За NATом модема стоит сервер с FreeBSD. Тунель организован между серверами.
Для работы туннеля в настройках файрвола модема необходимо разрешить протокол 47

iptables -t nat -A PREROUTING -p 47 -s 0.0.0.0  -j DNAT --to-destination 10.xxx.xxx.1

или в секции настроек виртуальных серверов добавить правило для сервера PPTP

За маршрутизацию пакетов из одной подсети в другую у сервера FreeBSD отвечает параметр net.inet.ip.forwarding, посмотр какое значение он имеет:

sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0

Включение функции маршрутизации

sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

Чтобы после перезагрузки это значение всегда было 1-цой. Это можно сделать 2-мя способами:

Cоздание интерфейса gif0 на хосте А:

ifconfig gif0 create
ifconfig gif0 192.168.10.253 192.168.10.254 netmask 255.255.255.255 
ifconfig gif0 tunnel 10.xxx.xxx.1 B.B.B.B

Это не опечатка ifconfig gif0 tunnel 10.xxx.xxx.1 B.B.B.B

Хост Б:

ifconfig gif0 create
ifconfig gif0 192.168.10.254 192.168.10.253 netmask 255.255.255.255
ifconfig gif0 tunnel B.B.B.B A.A.A.A

Когда интерфейсы туннеля подняты, можно проверить соединение пропинговав с хоста А, командой ping, IP адрес туннеля, хоста Б:

ping 192.168.10.254

Для доступа из сети 10.xxx.xxx.0/24 в сеть 10.yyy.yyy.0/24, необходимо добавить статический маршрут на каждом шлюзе.
Хост А:

route add -net 10.yyy.yyy.0/24 192.168.10.254

Хост Б.

route add -net 10.xxx.xxx.0/24 192.168.10.253

Что-бы после перезагрузки туннель настраивался автоматически, нужно дописать в /etc/rc.conf следующие строчки:

Хост А.

cloned_interfaces="gif0"
ifconfig_gif0="inet 192.168.10.253 192.168.10.254 netmask 255.255.255.255 tunnel 10.xxx.xxx.1 B.B.B.B"
static_routes="Host-B"
route_Host-B="-net 10.yyy.yyy.0/24 192.168.10.254"

Хост Б.

cloned_interfaces="gif0"
ifconfig_gif0="inet 192.168.10.254 192.168.10.253 netmask 255.255.255.255 tunnel B.B.B.B A.A.A.A"
static_routes="Host-A"
route_Host-A="-net 10.xxx.xxx.0/24 192.168.10.253"

Для создания gif интерфейсов можно выделить адрес из локальных сетей 10.xxx.xxx.0/24 и 10.yyy.yyy.0/24 соответственно.

Офис А. Шлюзом в Интернет является ADSL модем,а шлюзом до офиса Б - сервер FreeBSD.
Офис Б. Шлюзом в Интернет и шлюзом до офиса А - сервер FreeBSD.

СОЗДАННЫЙ ТУННЕЛЬ НЕ ЗАЩИЩЁН ШИФРОВАНИЕМ!

Ссылки:
http://www.lissyara.su/archive/ipsec
http://vds-admin.ru/networks/gre-generic-routing-encapsulation-sozdanie-tunnelei
https://www.opennet.ru/base/sec/ipsec_fr.txt.html
https://www.freebsd.org/doc/ru/books/handbook/ipsec.html
http://unixadm.info/content/%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-ipsec-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B5%D0%B9-freebsdipsecracoonipsec-tools-cisco-freebsdipsecracoonipsec-tools
https://www.opennet.ru/openforum/vsluhforumID1/95477.html
http://kovyrin.net/2006/03/17/how-to-create-ip-ip-tunnel-between-freebsd-and-linux
http://subnets.ru/blog/?p=280