Не так давно вышел релиз 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-е логи :) и радуемся.