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

Установка, настройка, поддержка
Ответить
Tiger
Сообщения: 45
Зарегистрирован: Пт фев 08, 2008 7:01 pm

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

Сообщение 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?

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Сообщение NiTr0 »

В скриптах ip-up.local и ip-down.local делать маскарадинг :) Я так на своей домашней машине сделал. Ничего сложного.

Tiger
Сообщения: 45
Зарегистрирован: Пт фев 08, 2008 7:01 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

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 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 - имя исходящего.

Tiger
Сообщения: 45
Зарегистрирован: Пт фев 08, 2008 7:01 pm

Сообщение Tiger »

Спасибо за столь подробный ответ!

Aven
Сообщения: 168
Зарегистрирован: Чт сен 27, 2007 4:48 pm

Сообщение Aven »

на самом деле достаточно:

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

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

Tiger
Сообщения: 45
Зарегистрирован: Пт фев 08, 2008 7:01 pm

Сообщение Tiger »

Aven писал(а):на самом деле достаточно:

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

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

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

в опциях пппд на провайдера параметр ifname и будеи всегда одно и то же имя

man pppd

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

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

Ответить