FreeBSD - Настройка, удаленного доступа к локальной сети через интернет средствами MPD

Ну как водится для начала читаем документацию либо Manual_RU (Переведена не полностью) либо оригинал Manual_EN
 
Переходим в порты
# cd /usr/ports/
 
и выполняем поиск нужно нам ПО
# make search name=mpd | grep Path
В моем случае я выбрал mpd4 не знаю почему  
переходим в каталог:
#cd /usr/ports/net/mpd4
Выполняем конфигурацию
# make config
 
опции для выбора:
[ ] NG_CAR     Use ng_car kernel module from port (< 7.0 only)
[ ] NG_IPACCT  Use ng_ipacct kernel module from port
 
я оставил все без изменений, далее выполняем сборку и установку:
#make && make install && make clean
переходим в каталог конфигурации приложения 
# cd /usr/local/etc/mpd4/
смотрим содержимое и копируем все файлы с переименованием т.е. приводим каталог к следующему виду:

# ls -l
total 54
-r--r--r--  1 root  wheel  11856  8 апр 09:40 mpd.conf.sample
-r--r--r--  1 root  wheel  39541  8 апр 09:40 mpd.script.sample
-r--r--r--  1 root  wheel    834  8 апр 09:40 mpd.secret.sample
# cp ./mpd.conf.sample ./mpd.conf
# cp ./mpd.script.sample  ./mpd.script
# cp ./mpd.secret.sample  ./mpd.secret
# ls -l
total 108
-r--r--r--  1 root  wheel  11856  8 апр 10:35 mpd.conf
-r--r--r--  1 root  wheel  11856  8 апр 09:40 mpd.conf.sample
-r--r--r--  1 root  wheel  39541  8 апр 10:36 mpd.script
-r--r--r--  1 root  wheel  39541  8 апр 09:40 mpd.script.sample
-r--r--r--  1 root  wheel    834  8 апр 10:36 mpd.secret
-r--r--r--  1 root  wheel    834  8 апр 09:40 mpd.secret.sample
 
приступаем к конфигурации
# mc -e ./mpd.conf
 
И приводим его к следующему виду

# cat ./mpd.conf

Spoiler: Highlight to view

default:
    load pptp0
    load pptp1
    load pptp2
pptp0:
    new -i ng0 pptp0 pptp0
    set ipcp ranges 172.16.0.1/32 172.16.0.10/32
    load pptp_standart
pptp1:
    new -i ng1 pptp1 pptp1
    set ipcp ranges 172.16.0.1/32 172.16.45.11/32
    load pptp_standart
pptp2:
    new -i ng2 pptp2 pptp2
    set ipcp ranges 172.16.0.1/32 172.16.0.12/32
    load pptp_standart
pptp_standart:
    set iface disable on-demand
    set bundle disable multilink
    set link yes acfcomp protocomp
# Требуем chap авторизации
    set link no pap chap
    set link enable chap
    set link keep-alive 60 180
    set ipcp yes vjcomp
# Устанавливаем DNS и Wins
    set ipcp dns 172.16.45.1
    set ipcp nbns 172.16.45.1
# Включаем proxy-arp
    set iface enable proxy-arp
# Включаем компрессию данных
    set bundle enable compression
# Включаем компрессию данных, совсестимую с Microsoft-клиентами
    set ccp yes mppc
# Включаем шифрование, совместимое с Microsoft-клиентами
    set ccp yes mpp-e40
    set ccp yes mpp-e128
    set ccp yes mpp-stateless
    set bundle yes crypt-reqd
# Задаем локальный адрес для входящих соединений
    set pptp self xxx.xxx.xxx.xxx
# Разрешаем входящие соединения
    set pptp enable incoming
    set pptp disable originate
 

в данной конфигурации максимальное количество единовременных подключения равно 3, его можно как увеличить так и сократить путем добавления и удаления секций pptpX.
 
так же для работы необходимы файлы mpd.links и mpd.secret
 

# cat ./mpd.links
pptp0:
    set link type pptp
pptp1:
    set link type pptp
pptp2:
    set link type pptp

 
# cat ./mpd.secret.sample
MyLogin         MyPassword
PeerLogin       PeerPassword


fred            "fred-pw"
joe             "foobar"        172.16.0.10
bob             "\x34\"foo\n"   172.16.1.10/24
sal             "yipee"         172.16.2.254
 
формат этих файлов понятен без комментариев.
далее выполняем:
#echo mpd_enable="YES" >>/etc/rc.conf
и
#/usr/local/etc/rc.d/mpd4 stat
 
смотрим ifconfig и sockstat | grep 1723 если все нормально то видим следующее:
 

# ifconfig
<--skipped-->

ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
это говорит о том что интерфейсы поднялись
 

# sockstat | grep 1723
root     mpd4       10640 16 tcp4   xxx.xxx.xxx.xxx:1723     *:*
это говорит о том наш MPD слушает порт на интерфейсе что прописан в mpd.conf в секции set pptp self
 
добавляем в фаервол следующие правила и наслаждаемся результатом:
allow tcp from any to xxx.xxx.xxx.xxx dst-port 1723
allow gre from any to any

allow ip from any to any via ngX
в последнем правиле вместо Х ставим номер интерфейса количество этих правил соответсвует количеству интерфейсов.
для контроля настраиваем ведения лог файлов 

добавляем в 
# /etc/syslog.conf

!mpd
*.* /var/log/mpd.log
и создаем файл
# touch /var/log/mpd.log