У меня есть интернет по ng0 интерфейсу, и еще есть tap0 с OpenVPN. При соединении с ним у меня прописываются маршруты на некоторые сайты через впнку, дефолтный шлюз остается на ng0. Все замечательно все довольны. Но, так как у меня внешний ип, и сервер выполняет роль веб-сервера и не только, то вчера обьявился косяк. Если к примеру example.org прописать через tap0, то все работает замечательно, но если приходит любой пакет с адресом источника = example.org то все ломается, пакет приходит на ng0 и видя что такой адрес назначения прописан у меня в таблице маршрутизации, делает вывод и идет через tap0 что соответсвенно дает нерабочую схему. Вчера пытался заставить через pf пакеты которые пришли с ng0 отправлять их туда же. Но ничего не смог.
Давно у меня стоял ipfw и там я подобное сделал
Код: Выделить всё
${fwcmd} add 100 forward tun0 ip from ${inet_ip} to table\(3\) out xmit ${lif}
Код: Выделить всё
ext_if="ng0" #Внешний интерфейс (смотрит к провайдеру WAN)
int_if="re0" #Внутренний интерфейс (смотрит в нашу сеть LAN)
int_net="192.168.1.0/24"
ext_gw="109.195.67.254"
vpn_if="tap0"
# using () for dynamicly change IP adress by pf, without reloading rules
#set loginterface $ext_if #собираем статистику на внешнем фейсе
# Для просмотра статистики используется команда pfctl -s info или pfctl -si
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
scrub on $ext_if all no-df max-mss 1400
scrub on $int_if all no-df max-mss 1400
nat on $ext_if from !($ext_if) -> ($ext_if:0) static-port
nat on $vpn_if from $int_if:network -> ($vpn_if) static-port
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 7000:7010 -> 192.168.1.100
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 9870:9880 -> 192.168.1.62
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 8760:8770 -> 192.168.1.110
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 8770:8780 -> 192.168.1.111
rdr-anchor "miniupnpd"
anchor "miniupnpd"
#block all #запретим все отовсюду
pass in log on $ext_if
pass out log on $vpn_if
# for UPnP
pass out on $int_if from any to 239.0.0.0/8 keep state
pass in on $int_if from any to 239.0.0.0/8 keep state
pass in on $int_if from any to any #разрешаем всё из локальной сети
pass out on $ext_if from ($ext_if) to any #разрешаем серверу доступ в интернет
pass in on $ext_if proto tcp from any to ($ext_if) port ssh #разрешаем ssh
pass in on $ext_if proto tcp from any to ($ext_if) port 80 #разрешаем www
pass in on $ext_if proto tcp from any to ($ext_if) port 443 #разрешаем www
pass in log inet proto icmp all icmp-type echoreq #разрешаем ping
Код: Выделить всё
pass in log on $ext_if
pass out log on $vpn_if
Карочи, нужна помощь
![Smile =)](./../images/smilies/smile.gif)