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

Включаем маскарадинг

Добавлено: Чт фев 21, 2008 11:52 am
Tiger
В FAQ есть раздел:
Включаем маскарадинг

# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source your_real_ip

192.168.0.0/24 - Ваша внутренняя сеть
your_real_ip - IP Ип через который все будет ходить
А если машина с биллингом получает интернет через pppoe соединение (интерфейс ppp0) , и выдаваемый IP-адрес меняется. Как сделать правильно маскарадинг на интерфейс ррр0 а не на IP?

Добавлено: Чт фев 21, 2008 2:35 pm
NiTr0
В скриптах ip-up.local и ip-down.local делать маскарадинг :) Я так на своей домашней машине сделал. Ничего сложного.

Добавлено: Чт фев 21, 2008 3:29 pm
Tiger
NiTr0 писал(а):В скриптах ip-up.local и ip-down.local делать маскарадинг :) Я так на своей домашней машине сделал. Ничего сложного.
Что делать маскарадинг, то понятно. Вопрос был "Как правильно?"

Нарыл такой вариант. Но не уверен в нем.

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

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD -s 172.0.0.0/24 -j ACCEPT

Добавлено: Пт фев 22, 2008 3:52 pm
NiTr0
Tiger писал(а):Нарыл такой вариант. Но не уверен в нем.

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

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD -s 172.0.0.0/24 -j ACCEPT
Вот пример моего скрипта ip-up.local

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

#!/bin/sh

ipt=iptables

. /etc/ppp/ip.conf

inet()
{
    echo $IF1 >/etc/ppp/vars/inet-if

    # удаляем дефолтный маршрут
    ip route del default

    # дефолтный маршрут - через впн
    ip route add default scope global via $GW1 dev $IF1

    # реализация NAT-a
    $ipt -t nat -A POSTROUTING -o $IF1 -j MASQUERADE

    # разрешение доступа к портам 
    $ipt -A INPUT -i $IF1 -p icmp --icmp-type 8 -j ACCEPT
    $ipt -A INPUT -i $IF1 -p icmp -d $IP1 -j ACCEPT
    
    if [ -f /etc/ppp/vars/incoming.ppp ];
    then
        for i in $(cat /etc/ppp/vars/incoming.ppp);
        do

            # разрешение передачи пакетов
            $ipt -A FORWARD -i $IF1 -o $i -m state --state ESTABLISHED,RELATED -j ACCEPT
            $ipt -A FORWARD -i $i -o $IF1 -j ACCEPT
            done
    fi

}

incoming()
{
    $ipt -A FORWARD -i $IF3 -o $IF1 -m state --state ESTABLISHED,RELATED -j ACCEPT
    $ipt -A FORWARD -i $IF1 -o $IF3 -j ACCEPT

    # разрешение доступа к портам из локалки
    $ipt -A INPUT -i $IF1 -p tcp -m multiport --dports 20,21,53,80,27000:27100 -j ACCEPT
    $ipt -A INPUT -i $IF1 -p udp -m multiport --dports 20,21,53,80,27000:27100 -j ACCEPT

    if [ -f /etc/ppp/vars/inet-if ]; 
    then
        IF_I=`cat /etc/ppp/vars/inet-if`

        # разрешение передачи пакетов
        $ipt -A FORWARD -i $IF_I -o $IF1 -m state --state ESTABLISHED,RELATED -j ACCEPT
        $ipt -A FORWARD -i $IF1 -o $IF_I -j ACCEPT

    fi
    echo $IF1 >> /etc/ppp/vars/incoming.ppp
}


date >>/var/log/ppp/links.log
echo "$1 up, ($2 $3 $4 $5 $6)">>/var/log/ppp/links.log
echo "">>/var/log/ppp/links.log


if [ $6 = $inetppp ];
then
    inet
else
    incoming
fi
/etc/ppp/ip.conf :

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

#!/bin/sh

#inet link
inetppp=linkname

#inet
IF1=$1
IP1=$4
GW1=$5

#network
IF3=eth0
IP3=`ip route list proto kernel|grep $IF3|sed 's/^.* src *//'|awk '{print $1}'`
GW3=192.168.0.254
Коротко: IF3 - интерфейс локалки, через который производится доступ к PPTP, и через него же производится доступ для входящих PPTP соединений
IF1 - это интерфейс, который поднимается.
Есть еще один огромный и страшный скрипт, в котором прописываются локальные маршруты, настраиваются параметры tcp/ip протокола, дефолтные правила для каждой из цепочек iptables (запрещается дефолтно форвардинг и все входящие, разрешаются все исходящие) и правила для каждого интерфейса (фильтр входящих пакетов по портам), очищаются таблицы iptables и т.д.
В файле incoming.ppp хранятся имена входящих ppp соединений, в inet-if - имя исходящего.

Добавлено: Пт фев 22, 2008 9:35 pm
Tiger
Спасибо за столь подробный ответ!

Добавлено: Вс фев 24, 2008 6:56 pm
Aven
на самом деле достаточно:

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

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
у меня именно так и сделано, инет через PPPoE получаю

Добавлено: Вс фев 24, 2008 9:09 pm
Tiger
Aven писал(а):на самом деле достаточно:

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

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
у меня именно так и сделано, инет через PPPoE получаю
Все как бы красиво, если бы не одно но.
В случае падения линка (ррр0), он автоматически переподнимается но уже со значением ррр+1 (минуя всех подключенных по впн к аббилису). И в случае запуска скрипта поднятия ната, привязка его к интерфейсу ррр0 уже не годится.

Добавлено: Пт фев 29, 2008 11:07 am
ran
в опциях пппд на провайдера параметр ifname и будеи всегда одно и то же имя

man pppd

и не надо никаких извращений в ип-ап/ип-даун. всё статически в иптабле прописать на ифейс указанный в ifname

а ваще... хочешь совет? не маскарадь на биллинге... поставь между ним и провом ещё один рутер и маскарадь там себе на здоровье - гемора меньше будет... да и надёжнее... и безопаснее...