FreeBSD: Заворачиваем трафик PF

Доброго дня! На днях мне на почту пришло сообщение, помоги настроить PF, что бы он заворачивал не весь трафик на VPN, а определённый хост. Решил я написать статью по этому поводу. Как разворачивать OpenVPN и PF я описывать не буду. Приступим сразу к конфигу.

Итак, мы имеем два физических интерфейса em0, em1 и интерфейс tun0 (OpenVPN). Интерфейс em0 смотрит в сторону провайдера, интерфейс em1 смотрит в сторону нашей локальной сети, а tun0 это наш интерфейс VPN на который будем что-нибудь заворачивать.

lan_net = "192.168.134.0/24"
ext_if = "em0"
int_if = "em1"
tun_if = "tun0"
ext_gw = "172.16.16.115"
tun_gw = "10.8.0.5"
table <change_ip> persist file "/etc/change.list"
scrub in all
nat on $tun_if from any to any -> ($tun_if)
nat on $ext_if from any to any -> ($ext_if)
block in from any to any
block out from any to any
pass log inet proto icmp all icmp-type {echoreq, unreach, trace}
pass out on $int_if from any to $lan_net
pass in quick on $int_if from $lan_net to $int_if
pass in on $int_if route-to ($tun_if $tun_gw) from any to <change_ip>
pass out on $tun_if route-to ($tun_if $tun_gw) from $tun_if to <change_ip>
pass in on $int_if route-to ($ext_if $ext_gw) from any to {any, !<change_ip>}
pass out on $ext_if route-to ($ext_if $ext_gw) from $ext_if to {any, !<change_ip>}
Получился вот такой конфиг. В таблицу change_ip мы заносим ip адреса серверов которые будут идти через ВПН. Всё проверено и работает.

 

Оставить ответ