Дано:
Две сети которые необходимо объеденить через туннель.
Оддна из сетей подключенна к Интернету через сервер с 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