Логинимся к dd-wrt по SSH:
Если PuTTY насторен логиниться с ключом, то увидим приглашение командной строки:
~ #
Создаем каталог где будут лежать кое-какие необходимые скрипты:
mkdir /jffs/etc/config
Дело в том, что в прошивке dd-wrt рабочие файлы при загрузке копируются в ОЗУ и оттуда исполняются, править файлы можно и в ОЗУ, но только до первой перезагрузки. dd-wrt проверяет ряд папок на наличие файлов со специфическими расширениями, в зависимости от которых и стартует их в определенное время.
Подробнее тут
http://www.dd-wrt.com/wiki/index.php/Startup_ScriptsКопируем из временной папки в свежесозданную скрипты, подлежащие дальнейщей правке:
cp /tmp/pptpd_client/ip-up /jffs/etc/config/
cp /tmp/pptpd_client/ip-down /jffs/etc/config/
cp /tmp/pptpd_client/options.vpn /jffs/etc/config/
Создадим скрипт, который скоприрует отредактированные файлы при загрузке роутера обратно в папку /tmp/pptpd_client/
Назвать его можно, как угодно, важно, что бы расширение было .startup (например: vpn_replace.startup):
cd /jffs/etc/config/
vi vpn_replace.startup
p.s. Редактор VI (суперкратко):
i - переход в режим редактирования
ESC - выход в режим комманд
:q - выход без сохранения
:wq - сохранить и выйти
мануал к редактору тут
Вставляем в него текст:
#!/bin/sh
sleep 40
cp /jffs/etc/config/ip-up /tmp/pptpd_client/
cp /jffs/etc/config/ip-down /tmp/pptpd_client/
cp /jffs/etc/config/options.vpn /tmp/pptpd_client/
Сохраняем и выходим: ":wq" + Enter
Делаем скрипт исполняемым
chmod 700 /jffs/etc/config/vpn_replace.startup
Редактируем файл опций: options.vpn
Его содержимое после редактирования:
defaultroute
lock
noauth
nodetach
refuse-eap
refuse-chap
refuse-mschap
nobsdcomp
nodeflate
#lcp-echo-failure 15
#lcp-echo-interval 3
persist
usepeerdns
idle 0
ip-up-script /tmp/pptpd_client/ip-up
ip-down-script /tmp/pptpd_client/ip-down
ipparam peer-garant
noipdefault
#debug
#mtu 1450
#mru 1450
name {имеющееся имя пользователя}
password {имеющийся пароль}
Файл ip-up после редактирования:
#!/bin/sh
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
REMOTESUB=$(/usr/sbin/nvram get pptpd_client_srvsub)
REMOTENET=$(/usr/sbin/nvram get pptpd_client_srvsubmsk)
case "$6" in
peer-garant)
route del default vlan1
route add -host 10.10.10.10 gw 172.21.0.1
route add -net 172.20.0.0 netmask 255.255.0.0 gw 172.21.0.1
/sbin/route add -net $REMOTESUB netmask $REMOTENET dev $1
/usr/sbin/iptables --insert OUTPUT --source 0.0.0.0/0.0.0.0 --destination $REMOTESUB/$REMOTENET --jump ACCEPT --out-interface $1
/usr/sbin/iptables --insert INPUT --source $REMOTESUB/$REMOTENET --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface $1
/usr/sbin/iptables --insert FORWARD --source 0.0.0.0/0.0.0.0 --destination $REMOTESUB/$REMOTENET --jump ACCEPT --out-interface $1
/usr/sbin/iptables --insert FORWARD --source $REMOTESUB/$REMOTENET --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface $1
/usr/sbin/iptables --insert FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu
if [ "$(/usr/sbin/nvram get pptpd_client_nat)" = "1" ]; then
/usr/sbin/iptables --table nat --append POSTROUTING --out-interface $1 --jump MASQUERADE
fi
;;
*)
esac
#blink DMZ led when iface is up
gpio="gpio"
flash=3
led=7
cur=1
while [ $cur -le $flash ]
do
$gpio disable $led
usleep 10000
$gpio enable $led
usleep 10000
cur=`expr $cur + 1`
done
exit 0
В конце скриптик, который при выполнении ip-up моргнет светодиодом DMZ три раза.
Еще скрипты:
http://www.dd-wrt.com/wiki/index.php/Useful_ScriptsФайл ip-down после редактирования:
#!/bin/sh
REMOTESUB=$(/usr/sbin/nvram get pptpd_client_srvsub)
REMOTENET=$(/usr/sbin/nvram get pptpd_client_srvsubmsk)
case "$6" in
peer-garant)
/sbin/route del -net $REMOTESUB netmask $REMOTENET dev $1
route add default vlan1
/usr/sbin/iptables -D OUTPUT --source 0.0.0.0/0.0.0.0 --destination $REMOTESUB/$REMOTENET --jump ACCEPT --out-interface $1
/usr/sbin/iptables -D INPUT --source $REMOTESUB/$REMOTENET --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface $1
/usr/sbin/iptables -D FORWARD --source 0.0.0.0/0.0.0.0 --destination $REMOTESUB/$REMOTENET --jump ACCEPT --out-interface $1
/usr/sbin/iptables -D FORWARD --source $REMOTESUB/$REMOTENET --destination 0.0.0.0/0.0.0.0 --jump ACCEPT --in-interface $1
/usr/sbin/iptables -D FORWARD --protocol tcp --tcp-flags SYN,RST SYN --jump TCPMSS --clamp-mss-to-pmtu
if [ "$(/usr/sbin/nvram get pptpd_client_nat)" = "1" ]; then
/usr/sbin/iptables --table nat -D POSTROUTING --out-interface $1 --jump MASQUERADE
fi
;;
*)
esac
exit 0
Еще можно добавить в каталог /jffs/etc/config/ файлик vpn_led.startup:
#!/bin/sh
I=ppp0
while sleep 1; do
XFER=`ifconfig $I|grep bytes`
if [ "$XFER" != "$PXFER" ]; then
LED='gpio disable 7; usleep 5000 ; gpio enable 7'
PXFER=$XFER
else
LED='gpio enable 7'
fi
if [ "$LED" != "$PLED" ]; then
eval $LED
PLED=$LED
fi
done
Каждую секунду проверяет был ли трансфер данных по тунелю ppp0 и, если да, то однократно коротко моргает светодиодом DMZ.
продолжение ниже...