А если машина с биллингом получает интернет через pppoe соединение (интерфейс ppp0) , и выдаваемый IP-адрес меняется. Как сделать правильно маскарадинг на интерфейс ррр0 а не на IP?Включаем маскарадинг
# 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 Ип через который все будет ходить
Включаем маскарадинг
Включаем маскарадинг
В FAQ есть раздел:
Что делать маскарадинг, то понятно. Вопрос был "Как правильно?"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
Вот пример моего скрипта ip-up.localTiger писал(а):Нарыл такой вариант. Но не уверен в нем.
Код: Выделить всё
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE iptables --append FORWARD -s 172.0.0.0/24 -j ACCEPT
Код: Выделить всё
#!/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
Код: Выделить всё
#!/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
IF1 - это интерфейс, который поднимается.
Есть еще один огромный и страшный скрипт, в котором прописываются локальные маршруты, настраиваются параметры tcp/ip протокола, дефолтные правила для каждой из цепочек iptables (запрещается дефолтно форвардинг и все входящие, разрешаются все исходящие) и правила для каждого интерфейса (фильтр входящих пакетов по портам), очищаются таблицы iptables и т.д.
В файле incoming.ppp хранятся имена входящих ppp соединений, в inet-if - имя исходящего.
на самом деле достаточно:
у меня именно так и сделано, инет через PPPoE получаю
Код: Выделить всё
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
Все как бы красиво, если бы не одно но.Aven писал(а):на самом деле достаточно:у меня именно так и сделано, инет через PPPoE получаюКод: Выделить всё
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
В случае падения линка (ррр0), он автоматически переподнимается но уже со значением ррр+1 (минуя всех подключенных по впн к аббилису). И в случае запуска скрипта поднятия ната, привязка его к интерфейсу ррр0 уже не годится.
в опциях пппд на провайдера параметр ifname и будеи всегда одно и то же имя
man pppd
и не надо никаких извращений в ип-ап/ип-даун. всё статически в иптабле прописать на ифейс указанный в ifname
а ваще... хочешь совет? не маскарадь на биллинге... поставь между ним и провом ещё один рутер и маскарадь там себе на здоровье - гемора меньше будет... да и надёжнее... и безопаснее...
man pppd
и не надо никаких извращений в ип-ап/ип-даун. всё статически в иптабле прописать на ифейс указанный в ifname
а ваще... хочешь совет? не маскарадь на биллинге... поставь между ним и провом ещё один рутер и маскарадь там себе на здоровье - гемора меньше будет... да и надёжнее... и безопаснее...