OpenWRT Kamikaze 8.0.9 на Linksys WRT54GL + настройка PPPoE

Не так давно вышел релиз OpenWRT Kamikaze 8.0.9, поэтому очередной Линксис будет сразу умучен именно такой версией прошивки.
Процесс перепрошивания и конфигурирования не сильно отличается от описанного мною ранее ( http://dng.kiev.ua/node/7 ), поэтому остановливаться подробно на каждом моменте смысла нет.
Таймзона нынче прописывается в файле /etc/config/system, строчкой ниже определения hostname:

root@OpenWrt-ME:~# cat /etc/config/system
config system
     option hostname OpenWrt-ME
     option timezone EET-2EEST,M3.5.0/3,M10.5.0/4

Теперь значение timezone из этого файла появится в /etc/TZ, который незачем трогать руками.

Далее. Пакетный менеджер ipkg заменен на opkg.

Теперь по поводу настройки WAN-интерфейса.
На сей раз тип подключения к провайдеру - PPPoE.
Для тестирования пришлось настраивать собственный PPPoE-сервер на основе mpd5 (см. http://subnets.ru/blog/?p=192 , с одним отличием - строку set pppoe service service_name0 пришлось закомментировать нах, так как при её наличии нифига не работало).
Впрочем, приведу на всякий случай конфиг, т.к. ссылки имеют неприятную особенность "протухать" как раз тогда, когда их содержание очень нужно.

mark# cat /ust/local/etc/mpd5/mpd.conf
startup:
     set user foo foopasswd admin
     # configure the console
     set console self 127.0.0.1 5005
     set console open # configure the web server
     set web self 100.100.232.17 5006
     set web open
default:
     load pppoe_server
pppoe_server:
     set ippool add pool1 100.100.235.3 100.100.235.255
     create bundle template C
     set bundle enable compression
     set bundle enable encryption
     set iface idle 0
     set iface disable proxy-arp
     set iface enable tcpmssfix
     set ipcp yes vjcomp
     set ipcp ranges 100.100.235.1/32 ippool pool1
     set ipcp dns 100.100.235.2
     set ecp disable dese-bis dese-old
     log phase chat connect lcp ipcp
     create link template PPPoE pppoe
     set link enable no-orig-auth
     set link max-children 10
     set auth max-logins 0
     set link action bundle C
     set link enable multilink
     set link yes acfcomp protocomp
     set link disable chap pap eap
     set link enable chap chap-msv1 chap-msv2 chap-md5
     set link keep-alive 10 60
     create link template fxp0_0 PPPoE
     set pppoe iface fxp0
     set link enable incoming

где fxp0 - сетевой интерфейс сервера.

Настройка клиента - гугление дало ссылку http://forum.openwrt.org/viewtopic.php?id=12811, последний пост которой как-то поубавил оптимизму. Впрочем, к делу.

root@OpenWrt-ME:~# cat /etc/config/network
[....] #### WAN configuration
config interface wan
     option ifname "eth0.1"
     option proto pppoe
     option username "login"
     option password "password"

Как ни странно, проблем с DNS не оказалось.
Зато показалось, что есть проблема с дефолтным фаейрволлом (который значительно переработан и усложнён по сравнению с 7.0.9): ping -I 192.168.1.1 google.com и traceroute -s 192.168.1.1 google.com с самого роутера казали 100% потери и сплошные звёзды соответственно. Поэтому дефолтный скрипт /etc/init.d/firewall, как и в прошлый раз, был заменен на собственный:

#!/bin/sh

START=45

iptables -F
iptables -t nat -F
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state INVALID -j REJECT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 2222 -m state --state NEW -j ACCEPT

iptables -A INPUT -i ppp0 -p icmp --icmp-type 8 -j REJECT --reject-with proto-unreach
iptables -A INPUT -i ppp0 -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp --icmp-type 3 -j ACCEPT

iptables -A INPUT -i ppp0 -j DROP

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

После замены фаерволла пинг и трейсроут с самого роутера (с адресом источника 192.168.1.1) всё равно казали то же самое. Почему - лично мне пока не понятно...
Хорошо, проверка с хоста из LAN-сети роутера (собственно мой десктоп, с пачкой vlan-ов на сетевой):
# ifconfig vlan222 create
# ifconfig vlan222 vlan 222 vlandev rl0
# dhclient vlan222

Получен IP 192.168.1.102

Пропишем маршрут к какому-либо IP или сети, чтоб гейтвеем был серый IP нашего Линксиса:
# route add 62.149.2.0/24 192.168.1.1
Теперь, запустив с клиентской машины ping -S 192.168.1.102 62.149.2.9 или traceroute -s 192.168.1.102 62.149.2.9, получаем правильный результат.
После этого оригинальный фаерволл был возвращен на место :) результат остался тем же.

UPD.

Насчёт дефолтного фаерволла - через несколько часов полёта меня перестало пускать по ssh при обращении на IP WAN-интерфейса. Какого демона - непонятно. Посему в /etc/init.d/firewall опять был запихан наш самописный скрипт с правилами.

Теперь - хотелось бы знать, какой IP получил роутер от провайдера, без необходимости беспокоить пользователей.
Схема действий: есть у меня подшефный сервер mark.company.com, на котором создается пользователь openwrt, который может входить по ssh с аутентификацией по ключу (а нет у него пароля! ни пустого, никакого вообще!), и сразу же выходить; в /var/log/auth.log логгируется успешная попытка входа, поэтому всегда можно узнать последний полученный Линксисом адрес, выполнив от root-а
mark# grep openwrt /var/log/auth.log

Итак, создаем на сервере mark.company.com пользователя openwrt, причем - у него должен быть хоть какой-то шелл, хоть /bin/sh, лишь бы не /sbin/nonexistent, иначе по ssh хрен пустит.

К сожалению, сгенеренный на сервере mark.company.com приватный ключ ни в какую не воспринимается OpenWRT-шным dropbear-ом, но выход есть - http://www.web-gooroo.com/rus/cms.different/adminitrirovanie/

Вкратце, делаем так:
root@OpenWrt-ME:~/.ssh# dropbearkey -t rsa -f private.key > authorized_keys

В authorized_keys оставляем только строку, начинающуюся с ssh-rsa
Добавляем эту строку (или переносим файл authorized_keys) на сервер mark.company.com в /home/openwrt/.ssh/authorized_keys
Теперь, автоматический вход по ssh на mark.company.com при получении Линксисом IP от провайдера:

на Линксисе находим файлик /etc/ppp/ip-up и в его конец добавляем такую строку:

/usr/bin/ssh -p 2222 -i /root/.ssh/private.key openwrt@mark.company.com exit

Всё, теперь грепаем на mark-е логи :) и радуемся.