При изучени исходников RU_DSL-2640U_3-06-04-3C_GPL.tar.gz
было обнаружено что есть параметр для сборки в файле
RU_DSL-2640U_3-06-04-3C_consumer\targets\RU_DSL-2640U\ru_dsl-2640u
# ASUS_PPTP_CLIENT is not set
соответственно редактируем в
ASUS_PPTP_CLIENT=y
Далее было обнаружено что при сборке по данной опции собираются исходники
в:
RU_DSL-2640U_3-06-04-3C_consumer\userapps\opensource\pptp-client
и
RU_DSL-2640U_3-06-04-3C_consumer\userapps\opensource\ppp\pppd_pptp
Причем родной PPTP который служит для PPOE и прочего,расположенный в
RU_DSL-2640U_3-06-04-3C_consumer\userapps\opensource\ppp
порождает бинарник /bin/pppd
а из \ppp\pppd_pptp другой - /bin/pppd_pptp
и будем далее запускать pppd_pptp
Изучим где ждет конфигурационные файлы pppd_pptp.
Ибо в сырцах ковыряться лениво сделаем для разнообразия MAKE прошивки.
натравим на файл
RU_DSL-2640U_3-06-04-3C_consumer\targets\RU_DSL-2640U\fs\bin\pppd_pptp
strings pppd_pptp | grep /ppp/
и видим что он ждет все
/tmp/ppp/options
/tmp/ppp/ip-down
/tmp/ppp/ip-up
/tmp/ppp/resolv.conf
......
/tmp/ppp/peers
Чтобы все это заработало надо модифицировать файл
RU_DSL-2640U_3-06-04-3C_consumer\targets\buildFS
А именно :
добавить к строкам создания каталогов корневой FS (mkkdir $ROOTFS/var etc)
строку
mkdir $ROOTFS/var/ppp
и в секцию создания симлинков
ln -s /var/ppp $ROOTFS/tmp/ppp
Таким образом на r/o файловой системе каталог /tmp/ppp будет симлинком на
каталог доступный по чтению-записи /var/ppp.
собираем еще раз прошивку (пересборка будет быстрее тк ни ядро ни многие
исходники не менялись) но я для удобства добавил ряд комманд в busybox:
cp,ls,mv,rmdir,tail,vi,grep,netstat,killall,more.
После сборки и заливки прошивки в ADSL маршрутизатор надо залить конфиги для
ppp_ppd собственно:
для этого телнетом и copy/paste отправим туда примерно следующее :
echo "MYPPTPLOGIN PPTP MYPPTPPASSWD * " > /var/ppp/chap-secrets
echo "MYPPTPLOGIN PPTP MYPPTPPASSWD " > /var/ppp/pap-secrets
mkdir /var/ppp/peers
echo "pty \"pptp MYPPTPSERVERIP --nolaunchpppd\"" > /var/ppp/peers/vpnuser
echo "name MYPPTPLOGIN" >> /var/ppp/peers/vpnuser
echo "remotename PPTP" >> /var/ppp/peers/vpnuser
echo "ipparam vpnuser" >> /var/ppp/peers/vpnuser
echo "persist" >> /var/ppp/peers/vpnuser
echo "mtu 1100" >> /var/ppp/peers/vpnuser
echo "lock" >> /var/ppp/peers/vpnuser
echo "noauth" >> /var/ppp/peers/vpnuser
echo "nobsdcomp" >> /var/ppp/peers/vpnuser
echo "nodeflate" >> /var/ppp/peers/vpnuser
echo "refuse-eap" >>/var/ppp/peers/vpnuser
echo "lcp-echo-interval 30" >>/var/ppp/peers/vpnuser
echo "crtscts" >> /var/ppp/peers/vpnuser
echo "asyncmap 0" >> /var/ppp/peers/vpnuser
echo "lcp-echo-failure 4" >>/var/ppp/peers/vpnuser
echo "proxyarp" >>/var/ppp/peers/vpnuser
сразу скажу что MTU сделал поменьше так как пров жутко лагает
в идеале надо ставить больше (это не суть важно в данный момент)
пробуем запускать через телнет
pppd_pptp call vpnuser debug dump
- поднимается и молча отваливается через время < 1 минуты.
правим это :
разрешаем трафик + ответы с интерфейса ppp0 - через телнет
iptables -I OUTPUT -o ppp0 -d 0.0.0.0/0.0.0.0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -s 0.0.0.0/0.0.0.0 -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
и пускам трафик к PPTP серверу мимо туннеля - через PPOE
route add -host MYPPTPSERVERIP gw <тот IP кторый есть default route до поднятия
pppd_pptp>
делаем новый default gateway
route add default dev ppp0
Ясно что это должно делаться скриптами ip-up и ip-down но нам главное
попробовать будет работать или нет.
Результат:
# ping
www.yandex.ru
PING
www.yandex.ru (93.158.134.3): 56 data bytes
56 bytes from 93.158.134.3: icmp_seq=0 ttl=57 time=80.0 ms
56 bytes from 93.158.134.3: icmp_seq=1 ttl=57 time=80.0 ms
56 bytes from 93.158.134.3: icmp_seq=2 ttl=57 time=120.0 ms
56 bytes from 93.158.134.3: icmp_seq=3 ttl=57 time=75.0 ms
---
www.yandex.ru ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 75.0/88.7/120.0 ms
при этом :
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
..... ПОГРЫЗЕНО...........
192.168.1.0 * 255.255.255.0 U 0 0 0 br0
default * 0.0.0.0 U 0 0 0 ppp0
вывод ps:
# ps wax
PID Uid VmSize Stat Command
1 admin 296 S init
2 admin SW< [ksoftirqd/0]
3 admin SW< [events/0]
4 admin SW< [khelper]
5 admin SW< [kblockd/0]
17 admin SW [pdflush]
18 admin SW [pdflush]
19 admin SW [kswapd0]
20 admin SW< [aio/0]
25 admin SW [mtdblockd]
34 admin 324 S -sh
72 admin 1372 S cfm
188 admin 224 S pvc2684d
249 admin 260 S igmp lo
408 admin 384 S nas -P /var/nas.lan0.pid -H 34954 -l br0 -i wl0 -A -m
468 admin 284 S dhcpd
480 admin 312 S syslogd -C -l 6
484 admin 264 S klogd
486 admin 224 S sntp -s <ПОГРЫЗЕНО> -s <ТОЖЕ ПОГРЫЗЕНО> -t Almaty, No
489 admin 1300 S telnetd
490 admin 1352 S sshd
496 admin 188 S bftpd
500 admin 248 S tftpd
523 admin 1588 S httpd
524 admin 1352 S cfm
528 admin 428 S pppd -c 0.35.1 -i nas_0_35 -u AT0014416 -p *********
655 admin 1604 S sshd
656 admin 1616 S sshd
657 admin 296 S sh -c sh
658 admin 320 S sh
787 admin 224 S /bin/dnsprobe
792 admin 300 S upnp -L br0 -W ppp_0_35_1 -D
802 admin 232 S reaim -e <ПОГРЫЗЕНО>
851 admin 1880 S tr69c
853 admin 412 S siproxd --config /var/siproxd/siproxd.conf
854 admin 412 S siproxd --config /var/siproxd/siproxd.conf
855 admin 412 S siproxd --config /var/siproxd/siproxd.conf
2312 admin 508 S pppd_pptp call vpnuser debug dump
3069 admin 296 S sh -c pptp <IP моего PPTP сервера> --nolaunchpppd
3070 admin 288 S pptp: GRE-to-PPP gateway on /dev/ptyp1
3091 admin 296 S pptp: call manager for <IP моего PPTP сервера>
3121 admin 288 R ps wax
#
вывод
ifconfig ppp0:
# ifconfig ppp0
ppp0 Link encap:Point-Point Protocol
inet addr:<ЛОКАЛЬНЫЙ IP> P-t-P:<IP PPTP СЕРВЕРА> Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1100 Metric:1
RX packets:2102 errors:0 dropped:0 overruns:0 frame:0
TX packets:1448 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:114953 (112.2 KiB) TX bytes:69183 (67.5 KiB)
#
Ну и кусок сислога:
Jan 19 00:26:28 daemon info pppd[3390]: pppd options in effect:
Jan 19 00:26:28 daemon info pppd[3390]: debug^I^I# (from command line)
Jan 19 00:26:28 daemon info pppd[3390]: persist^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: dump^I^I# (from command line)
Jan 19 00:26:28 daemon info pppd[3390]: noauth^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: refuse-eap^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: name <СЬЕДЕНО>^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: remotename PPTP^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: ^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: pty pptp <IP PPTP СЕРВЕРА> --nolaunchpppd^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: crtscts^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: asyncmap 0^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: mtu 1100^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: lcp-echo-failure 4^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: lcp-echo-interval 30^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: ipparam vpnuser^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: proxyarp^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: nobsdcomp^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon info pppd[3390]: nodeflate^I^I# (from /tmp/ppp/peers/vpnuser)
Jan 19 00:26:28 daemon notice pppd[3391]: pppd 2.4.2 started by admin, uid 0
Jan 19 00:26:28 daemon info pppd[3391]: Using interface ppp0
Jan 19 00:26:28 daemon notice pppd[3391]: Connect: ppp0 <--> /dev/ttyp1
Jan 19 00:26:28 daemon notice pptp[3396]: anon log[main:pptp.c:321]: The synchronous pptp option is NOT activated
Jan 19 00:26:28 daemon notice pptp[3398]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control packet type is 1 'Start-Control-Connection-Request'
Jan 19 00:26:28 daemon notice pptp[3398]: anon log[ctrlp_disp:pptp_ctrl.c:721]: Received Start Control Connection Reply
Jan 19 00:26:28 daemon notice pptp[3398]: anon log[ctrlp_disp:pptp_ctrl.c:755]: Client connection established.
Jan 19 00:26:29 daemon warn pppd[3391]: Warning - secret file /tmp/ppp/pap-secrets has world and/or group access
Jan 19 00:26:29 daemon notice pptp[3398]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control packet type is 7 'Outgoing-Call-Request'
Jan 19 00:26:29 daemon notice pptp[3398]: anon log[ctrlp_disp:pptp_ctrl.c:841]: Received Outgoing Call Reply.
Jan 19 00:26:29 daemon notice pptp[3398]: anon log[ctrlp_disp:pptp_ctrl.c:880]: Outgoing call established (call ID 0, peer's call ID 46282).
Jan 19 00:26:29 daemon warn pppd[3391]: Warning - secret file /tmp/ppp/chap-secrets has world and/or group access
Jan 19 00:26:29 daemon info pppd[3391]: CHAP authentication succeeded
Jan 19 00:26:29 daemon err pppd[3391]: Cannot determine ethernet address for proxy ARP
Jan 19 00:26:29 daemon notice pppd[3391]: local IP address <ЛОКАЛЬНЫЙ IP>
Jan 19 00:26:29 daemon notice pppd[3391]: remote IP address <IP PPTP СЕРВЕРА>
Jan 19 00:26:46 user warn dnsprobe[787]: dns query failed
Jan 19 00:26:48 user warn dnsprobe[787]: dns query failed
Jan 19 00:26:50 user warn dnsprobe[787]: dns query failed
.... <ТУТ я руками поправил маршрутизацию> ...... и ДНС поднялся
Jan 19 00:27:21 user notice dnsprobe[787]: Switching Back To Primary DNS server
Jan 19 00:27:29 daemon notice pptp[3398]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control packet type is 5 'Echo-Request'
Jan 19 00:27:29 daemon notice pptp[3398]: anon log[logecho:pptp_ctrl.c:659]: Echo Reply received.
В общем TODO:
сделать человечьи ip-up ip-down с сохранением дефолта и восстановлением,
вставкой правил IPTABLES в тч и правку NAT (с этим вообще не разбирался)
В идеале вообще похоронить бы проприетарный cfm и жить с простым тестовым конфигом
но увы openwrt не дождемся ибо нет драйвера ADSL и держать ради проприетарных драйверов Kernel 2.6.8.1 они не будут.
В общем комменты и идеи приветствуются. мыло для отлупов Dimerson_Сцобаккомайл.ру
В идеале как ленивый человек я бы еще портанул под этот мипс какой-нибудь
deco (миднайт уж больно тяжел).
И допаять бы USB ибо все сервисы для него стартуют.
P.S. Для сборки был заюзан Debian testing aka lenny
нюансов не было - rpm'ы кросскомпилера и uClibc были дебианизированы
алиеном и установлены штатно.
P.P.S. Отдельное спасибо человеку с pudeev.livejournal.com - его труды
подтолкнули меня к данному исследованию.
P.P.P.S. Работа проводилась по ночам в течении недели после купания маленького
ребенка то есть результат получен но не причесан до готового вида так как нет особо времени на это . Welcome энтузиасты.