Страница 1 из 1

FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 11:19:22
ZAPODLO
Всю голову поломал.
Исходные:
FreeBSD 8.2 (ядро собрано с поддержкой IPFW)
Интерфейсы:
re0 - домашняя сеть 192.0.0.0
vr0 - Провайдер 1 (локальный IP не выдается, через него поднимается PPP для интернет )
tun0 - Интернет от Провайдера 1 (поднят через vr0)
vr1 - Провайдер 2 (Локальный IP выдается DHCP (10.0.0.0), интернета нет)

Требуется:
Машинами из домашней сети 192.0.0.0 выходить в инет через Провайдера 1 tun0
Машинами из домашней сети 192.0.0.0 пользоваться локальными ресурсами Провайдера 2 vr1 (10.0.0.0)

Помогите пожалуйста правильно разрулить.

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 12:01:43
BlackJaguar
ZAPODLO писал(а):Всю голову поломал.
Исходные:
FreeBSD 8.2 (ядро собрано с поддержкой IPFW)
Интерфейсы:
re0 - домашняя сеть 192.0.0.0
vr0 - Провайдер 1 (локальный IP не выдается, через него поднимается PPP для интернет )
tun0 - Интернет от Провайдера 1 (поднят через vr0)
vr1 - Провайдер 2 (Локальный IP выдается DHCP (10.0.0.0), интернета нет)

Требуется:
Машинами из домашней сети 192.0.0.0 выходить в инет через Провайдера 1 tun0
Машинами из домашней сети 192.0.0.0 пользоваться локальными ресурсами Провайдера 2 vr1 (10.0.0.0)

Помогите пожалуйста правильно разрулить.

Код: Выделить всё

echo "firewall_enable=YES" >>/etc/rc.conf
echo "firewall_script=/etc/ipfw.conf" >>/etc/rc.conf
echo "natd_enable=YES" >>/etc/rc.conf
echo "natd_scripts=/etc/natd.conf" >>/etc/rc.conf
ipfw.conf:

Код: Выделить всё

#!/bin/sh
fw=/sbin/ipfw -q
local="192.0.0.0/8"
prov="10.0.0.0/8"
isp="{ isp1-gateway-ip, isp1-dns1-ip, isp1-dns2-ip, isp2-gateway-ip, isp2-dns1-ip, isp2-dns2-ip }"
ip_ext="my-static-ip-set-by-isp1"

$fw -f flush
$fw add allow all from any to any via lo0
$fw add allow all from any to any via re0

$fw add divert natd all from $local to any via tun0
$fw add divert natd all from any to $ip_ext via tun0

$fw add allow all from any to any
и вообще, показывайте Ваш netstat -rn при поднятом tun0

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 12:14:21
ZAPODLO

Код: Выделить всё

zp# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            213.129.104.4      UGS         0 37920769   tun0
10.0.0.0/24        00:26:5a:06:2e:7d  US          0      712    vr1 =>
10.0.0.0/8         10.66.56.1         UGS         0     2608    vr1
10.66.56.0/21      link#3             U           0      360    vr1
10.66.63.*       link#3             UHS         0        0    lo0
127.0.0.1          link#5             UH          0     1168    lo0
192.168.0.0/24     link#1             U           2 47302426    re0
192.168.0.1        link#1             UHS         0        0    lo0
194.186.60.0/24    00:26:5a:06:2e:7d  US          0        4    vr1
213.129.104.4      link#7             UHS         0        0   tun0
213.129.108.*     127.0.0.1          UH          0        0    lo0
Еще маленько уточнение. Хотелось бы еще по SSH рулить шлюзом из внешки. + Еще виртуалка там крутится, доступ по VNC. То же хотелось бы юзать.

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 12:37:23
ZAPODLO
А что делать с DNS? resolv.conf затирается и при поднятии PPP от Провайдер 1 и при запросе DHCP от Провайдер 2.
Отключать в PPP и DHCP запрос DNS и прописывать в resolv.conf вручную DNS обоих провайдеров?

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 12:50:14
ZAPODLO

Код: Выделить всё

isp="{ isp1-gateway-ip, isp1-dns1-ip, isp1-dns2-ip, isp2-gateway-ip, isp2-dns1-ip, isp2-dns2-ip }"
Как прописать, если статически ничего нет? Получается на момент поднятия PPP и от DHCP?

Код: Выделить всё

ip_ext="my-static-ip-set-by-isp1"
Опять же не статика, а PPP. Статического IP нет, запущен только DynDNS, по нему и коннекчусь.

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 13:16:40
BlackJaguar
ZAPODLO писал(а):

Код: Выделить всё

zp# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            213.129.104.4      UGS         0 37920769   tun0
10.0.0.0/24        00:26:5a:06:2e:7d  US          0      712    vr1 =>
10.0.0.0/8         10.66.56.1         UGS         0     2608    vr1
10.66.56.0/21      link#3             U           0      360    vr1
10.66.63.*       link#3             UHS         0        0    lo0
127.0.0.1          link#5             UH          0     1168    lo0
192.168.0.0/24     link#1             U           2 47302426    re0
192.168.0.1        link#1             UHS         0        0    lo0
194.186.60.0/24    00:26:5a:06:2e:7d  US          0        4    vr1
213.129.104.4      link#7             UHS         0        0   tun0
213.129.108.*     127.0.0.1          UH          0        0    lo0
Еще маленько уточнение. Хотелось бы еще по SSH рулить шлюзом из внешки. + Еще виртуалка там крутится, доступ по VNC. То же хотелось бы юзать.
погорячился. Вам нужно смотреть вариант с двумя nat-демонами, имхо. Я такой вариант не реализовывал, помочь не смогу.
суть такова: нужно запустить два демона NAT, смаршутизировать трафик в 10-ую сеть и обратно. первым должен сработать NAT в 10-ую сеть и только после этого должно сработать общий NAT в Интернет через prov1
а-ля:
$fw add divert natd1 all from $local to 10.0.0.0/8 via vr1
$fw add divert natd1 all from 10.0.0.0/8 to 10.66.63.* via vr1

$fw add divert natd2 all from $local to any via tun0
$fw add divert natd2 all from any to $ext_ip via tun0

только вот я не уверен, что пакеты, попадая в первый NAT и возвращаясь, не будут попадать во второй NAT. Я даже более уверен, что так и произойдет.

Можно попробовать порешать этот вопрос через PF, в котором я не силен.
Если есть время - разгребайте документацию по двум NAT-демонам. если нет - реализовывайте вариант с одним демоном и пытайтесь подключить второго провайдера на тестовой машине.

Больше навскидку мыслей нет.

если динамическое получение адресов по PPP - то хоть диапазоны прописывайте, сузить их до нужного предела всегда успеется. более того скажу, что DNS и GW у провайдера по-любому статика.

Re: FreeBSD 8.2 + IPFW + Nat

Добавлено: 2011-04-04 16:14:43
ZAPODLO
Спасибо за помощь.