0

Настройка pppoe в freebsd

Прежде всего мне нужно организовать доступ в сеть интернет. Сначала на самом шлюзе, а затем и во всей локальной сети.

PPPoE

Для этого я подниму PPPoE соединение.
В FreeBSD PPP «из коробки», осталось только настроить:
Конфиг для PPP распологается в /etc/ppp.

Сохраняю пример конфигурационного файла:
# cp /etc/ppp/ppp.conf /etc/ppp/ppp.conf.sample
Редактирую конфиг
# ee /etc/ppp/ppp.conf
У меня файл ppp.conf выглядит следующим образом:

default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)

vt:
set device PPPoE:rl0
set authname LOGIN
set authkey PASSWORD
set mru 1492
set mtu 1492
set dial
set login
add default HISADDR

Где LOGIN и PASSWORD выдаются провайдером
Для того чтобы линк поднимался при загрузке системы прописываем rc.conf следущее:

# ppp_enable="YES" >> /etc/rc.conf
# ppp_mode="ddial" >> /etc/rc.conf
# ppp_profile="vt" >> /etc/rc.conf
# ppp_nat="NO" >> /etc/rc.conf

ppp_mode — тип ppp соединения
ppp_profile — профиль по которому производить соединение (см. ppp.conf)
ppp_nat — отключаю встроенный в ppp NAT. Буду использовать ipfw.

Теперь при включении системы будет подниматься интерфейс tun0, через который у меня будет интернет.

Настройка IPFW и NAT

Следующим шагом я создам правила для firewall′а, которые разрешать ходить интернет машинам из моей локальной домашней сети.
Создаю файл для правил и устанавливаю на него права (исполняемый файл, у которого владелец root:wheel)
# touch /etc/ipfw.rules && chmod 750 /etc/ipfw.rules && chown root:wheel /etc/ipfw.rules

Начиная с FreeBSD 7 в системе появился NAT в ipfw, который я и буду использовать, вместо демона natd
Для того, что бы это было возможно, в ядре должны быть прописаны следующие опции:

options IPFIREWALL # firewall
options IPFIREWALL_VERBOSE # firewall log
options IPFIREWALL_VERBOSE_LIMIT=1000 # firewall log limit
options IPFIREWALL_FORWARD # ipfw forwarding
options DUMMYNET # shaping
options IPFIREWALL_NAT # ipfw nat
options LIBALIAS # for ipfw nat or ng_nat

Правила firewall’a
# cat /etc/ipfw.rules

#!/bin/sh
FwCMD="/sbin/ipfw -q "

LanOut="tun0"
LanIn="fxp0"

IpIn="192.168.100.1"
NetIn="192.168.100.0/24"

${FwCMD} -f flush
${FwCMD} add 100 check-state
${FwCMD} add 101 allow ip from any to any via lo0
${FwCMD} add 102 deny ip from any to 127.0.0.0/8
${FwCMD} add 103 deny ip from 127.0.0.0/8 to any

${FwCMD} add 160 allow tcp from any to any established
${FwCMD} add 170 allow icmp from any to any icmptypes 0,3,8,11
${FwCMD} add 180 allow ip from me to any out xmit ${LanOut}

# NAT
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} 150 add nat 1 all from ${NetIn} to not ${NetIn} out via ${LanOut}
${FwCMD} 150 add nat 1 all from any to me in via ${LanOut}

${FwCMD} add 200 allow ip from ${NetIn} to ${NetIn} via ${LanIn}
${FwCMD} add 64990 allow ip from any to any

Это самый простой вариант firewall’а. Практически же нет ничего кроме NATа. Однако, мне для начала вполне достаточно.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.