Собственно сам вымученный скрипт:
#!/bin/sh -v
# Dual pppoe connection
# Version 3.01
# Copyright dE1l
LOGIN_INT="******"
PASSW_INT="******"
LOGIN_LAN="******/local"
PASSW_LAN="******"
VLAN="*****"
DNS3=192.168.1.1
DNS1=10.152.195.41
DNS2=8.8.8.8
OPEN_PORT=12312
OPEN_PORT_2=12313
LOCAL_CLIENT=192.168.1.100
LOCAL_CLIENT_2=192.168.1.101
#constanty
LAN_SUBNET=10.152.0.0/16
# jdem, poka router progruzit vse svoi servisy
sleep 3
# podnimaev VLAN esli nyzhno########
if [ -n 'ifconfig |grep ${VLAN}' ]; then
ifconfig ${VLAN} up
sleep 1
fi
# ochischaem marshruty
iptables -t nat -F POSTROUTING
# Sozdaem rabochuyu papku i fail dlya logov
mkdir /tmp/ppp
touch /tmp/ppp/ipup_test.log
echo "`date` start script v3.01">> /tmp/ppp/ipup_test.log
#-----------------------------------------------
# Sozdanie failov(configov) podklyuchenii
################################################
echo "plugin /usr/lib/rp-pppoe.so
nic-${VLAN}
noccp
nomppc
noipdefault
noauth
defaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
user '${LOGIN_INT}'
password '${PASSW_INT}'
default-asyncmap
mtu 1492
mru 1492
unit 0
persist
maxfail 0
holdoff 30
lcp-echo-interval 10
lcp-echo-failure 5" > /tmp/ppp/int.pppoe
echo "plugin /usr/lib/rp-pppoe.so
nic-${VLAN}
noccp
nomppc
noipdefault
noauth
nodefaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
user '${LOGIN_LAN}'
password '${PASSW_LAN}'
default-asyncmap
mtu 1492
mru 1492
unit 1
persist
maxfail 0
holdoff 30
lcp-echo-interval 10
lcp-echo-failure 5" > /tmp/ppp/loc.pppoe
#-----------------------------------------------
#-----------------------------------------------
# Blok soedinenii i marshrutov
################################################
echo '#!/bin/sh -v
echo "`date` start /tmp/ppp/ip-up for $1">> /tmp/ppp/ipup_test.log
WLAN_SUBNET=192.168.1.0/24
LAN_SUBNET=10.152.0.0/16
echo $1
if [ $1 == ppp0 ]; then
iptables -t nat -I POSTROUTING -s ${WLAN_SUBNET} -o ppp0 -j SNAT --to-source $4
fi
if [ $1 == ppp1 ]; then
ip ro add ${LAN_SUBNET} dev ppp1
iptables -t nat -I POSTROUTING 2 -s ${WLAN_SUBNET} -d ${LAN_SUBNET} -o ppp1 -j SNAT --to-source $4
fi
' > /tmp/ppp/ip-up
echo '#!/bin/sh -v
echo "`date` start /tmp/ppp/ip-down for $1">> /tmp/ppp/ipup_test.log
' > /tmp/ppp/ip-down
# Delaem ispolnyaemymi
chmod +x /tmp/ppp/ip-up
chmod +x /tmp/ppp/ip-down
sleep 2
# Startuem soedineniya
pppd file /tmp/ppp/int.pppoe
sleep 3
pppd file /tmp/ppp/loc.pppoe
#-----------------------------------------------
#-----------------------------------------------
# Otkryvaem porty
################################################
iptables -t nat -I PREROUTING -p tcp --dport ${OPEN_PORT} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT}:${OPEN_PORT}
iptables -t nat -I PREROUTING -p udp --dport ${OPEN_PORT} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT}:${OPEN_PORT}
iptables -t nat -I PREROUTING -p tcp --dport ${OPEN_PORT_2} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT_2}:${OPEN_PORT_2}
iptables -t nat -I PREROUTING -p udp --dport ${OPEN_PORT_2} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT_2}:${OPEN_PORT_2}
#-----------------------------------------------
sleep 3
#-----------------------------------------------
# propisovaem DNS
################################################
nvram set wan_dns="$DNS1 $DNS2 $DNS3"
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
echo "nameserver $DNS3" >>/tmp/resolv.dnsmasq
echo "address=/torrent.dml/10.152.195.95
address=/taunt.local/10.152.203.3
address=/decker.local/10.152.196.50
address=/radio.local/10.152.205.167
address=/cat.dsl/10.152.203.3
address=/forum.local/10.152.205.139
address=/img.local/10.152.195.4
" >>/tmp/dnsmasq.conf
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
# ifconfig
# ip ro
# iptables -t nat -n -L
Изменения:# Dual pppoe connection
# Version 3.01
# Copyright dE1l
LOGIN_INT="******"
PASSW_INT="******"
LOGIN_LAN="******/local"
PASSW_LAN="******"
VLAN="*****"
DNS3=192.168.1.1
DNS1=10.152.195.41
DNS2=8.8.8.8
OPEN_PORT=12312
OPEN_PORT_2=12313
LOCAL_CLIENT=192.168.1.100
LOCAL_CLIENT_2=192.168.1.101
#constanty
LAN_SUBNET=10.152.0.0/16
# jdem, poka router progruzit vse svoi servisy
sleep 3
# podnimaev VLAN esli nyzhno########
if [ -n 'ifconfig |grep ${VLAN}' ]; then
ifconfig ${VLAN} up
sleep 1
fi
# ochischaem marshruty
iptables -t nat -F POSTROUTING
# Sozdaem rabochuyu papku i fail dlya logov
mkdir /tmp/ppp
touch /tmp/ppp/ipup_test.log
echo "`date` start script v3.01">> /tmp/ppp/ipup_test.log
#-----------------------------------------------
# Sozdanie failov(configov) podklyuchenii
################################################
echo "plugin /usr/lib/rp-pppoe.so
nic-${VLAN}
noccp
nomppc
noipdefault
noauth
defaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
user '${LOGIN_INT}'
password '${PASSW_INT}'
default-asyncmap
mtu 1492
mru 1492
unit 0
persist
maxfail 0
holdoff 30
lcp-echo-interval 10
lcp-echo-failure 5" > /tmp/ppp/int.pppoe
echo "plugin /usr/lib/rp-pppoe.so
nic-${VLAN}
noccp
nomppc
noipdefault
noauth
nodefaultroute
noaccomp
nobsdcomp
nodeflate
nopcomp
nomppe
user '${LOGIN_LAN}'
password '${PASSW_LAN}'
default-asyncmap
mtu 1492
mru 1492
unit 1
persist
maxfail 0
holdoff 30
lcp-echo-interval 10
lcp-echo-failure 5" > /tmp/ppp/loc.pppoe
#-----------------------------------------------
#-----------------------------------------------
# Blok soedinenii i marshrutov
################################################
echo '#!/bin/sh -v
echo "`date` start /tmp/ppp/ip-up for $1">> /tmp/ppp/ipup_test.log
WLAN_SUBNET=192.168.1.0/24
LAN_SUBNET=10.152.0.0/16
echo $1
if [ $1 == ppp0 ]; then
iptables -t nat -I POSTROUTING -s ${WLAN_SUBNET} -o ppp0 -j SNAT --to-source $4
fi
if [ $1 == ppp1 ]; then
ip ro add ${LAN_SUBNET} dev ppp1
iptables -t nat -I POSTROUTING 2 -s ${WLAN_SUBNET} -d ${LAN_SUBNET} -o ppp1 -j SNAT --to-source $4
fi
' > /tmp/ppp/ip-up
echo '#!/bin/sh -v
echo "`date` start /tmp/ppp/ip-down for $1">> /tmp/ppp/ipup_test.log
' > /tmp/ppp/ip-down
# Delaem ispolnyaemymi
chmod +x /tmp/ppp/ip-up
chmod +x /tmp/ppp/ip-down
sleep 2
# Startuem soedineniya
pppd file /tmp/ppp/int.pppoe
sleep 3
pppd file /tmp/ppp/loc.pppoe
#-----------------------------------------------
#-----------------------------------------------
# Otkryvaem porty
################################################
iptables -t nat -I PREROUTING -p tcp --dport ${OPEN_PORT} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT}:${OPEN_PORT}
iptables -t nat -I PREROUTING -p udp --dport ${OPEN_PORT} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT}:${OPEN_PORT}
iptables -t nat -I PREROUTING -p tcp --dport ${OPEN_PORT_2} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT_2}:${OPEN_PORT_2}
iptables -t nat -I PREROUTING -p udp --dport ${OPEN_PORT_2} -i ppp1 -s ${LAN_SUBNET} -j DNAT --to-destination ${LOCAL_CLIENT_2}:${OPEN_PORT_2}
#-----------------------------------------------
sleep 3
#-----------------------------------------------
# propisovaem DNS
################################################
nvram set wan_dns="$DNS1 $DNS2 $DNS3"
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
echo "nameserver $DNS3" >>/tmp/resolv.dnsmasq
echo "address=/torrent.dml/10.152.195.95
address=/taunt.local/10.152.203.3
address=/decker.local/10.152.196.50
address=/radio.local/10.152.205.167
address=/cat.dsl/10.152.203.3
address=/forum.local/10.152.205.139
address=/img.local/10.152.195.4
" >>/tmp/dnsmasq.conf
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
# ifconfig
# ip ro
# iptables -t nat -n -L
Маршруты теперь прописываются в ip-up
Появился ЛОГ! найти его можно по адресу /tmp/ppp/ipup_test.log В нём вы можете увидеть работу ip-up и как часто у вас происходят реконекты. Чесгря, инфа(статистика) буде интересна даже мне)
Еще в прошлом скрипте наладилась работа DNS. Теперь он работает по такому же принципу, как hosts в винде. А это значит, что нам с вами потребуется собрать единую базу для нашей сети и добавить в список всевозможные внутренние адреса.
Теперь оба соединения работают через SNAT. Как показали тесты, для локалки на dir-320 это дало прирост в скорости скачивания на 20%. Теперь инет тоже работает через SNAT и это, возможно, так же уменьшит нагрузку на процессор.
Замечено еще вот что.
Для того, чтобы открыть порт, вам необходимо: отключить файрвол в роутере, запустить торрент на компе и указать в настройках порт, соответствующий вашему ip и порту, прописанному в скрипте. Только после этого вы можете проверить, открылся ли порт тут
http://decker.local/testport.php?port=12312
скрипт обновился до 3.01 =) добавил 1 строчку)
ОтветитьУдалить