Nstx-maemo
From Shmuma
Contents |
Как настроить NSTX для Maemo
Warning: Все описанное ниже предназначено исключительно для обучения и демонстрации. Автор не несет ответственности за использование этой инструкции.
Что такое NSTX
NSTX — это реализация протокола, позволяющего тунеллировать IP-трафик через DNS-запросы. Ссылки по теме:
Зачем это?
Большинство WiFi сетей которые можно поймать в центре крупных городов построены так: вы соединяетесь без логинов-паролей, после чего все ваши HTTP-запросы перенаправляются на страницу с просьбой ввести пин-код для продолжения работы (или отправить смс-ку, или заплатить денег каким-либо другим способом, и т.п.). Штука в том, что несмотря на невозможность нормального пользования http, DNS обычно работает нормально. Вот это-то и используется в IP-over-DNS.
Как это работает?
Есть DNS-сервер (A), отвечающий за зону xxx.ru. В этой зоне есть подзона nstx.xxx.ru, за которую отвечает другой сервер (B), на 53-м порту которого запущен демон nstxd. На сервере B поднят tap-интерфейс, пакеты с которого маскарадятся в инет. На клиенте (C) поднят другой tap-интерфейс, на котором висит демон nstxcd. Все пакеты, попадающие в интерфейс на клиенте, обрабатываются nstxcd, который преобразует данные в DNS-запросы в зоне nstx.xxx.ru. Эти запросы обрабатываются nstxd на машине B, преобразующий их в пакеты и отправляются в инет с машины B. Ответы проходят обратное преобразование.
Таким образом, для того чтобы соорудить эту конструкцию, нам понадобится:
- dns-зона, администрируемая напрямую, либо через вменяемый интерфейс, позволяющий создавать подзоны. Я перепробовал mastername, zoneedit, xname.org и naunet.ru. Остановился на naunet, mastername просто не позволяет добавлять NS-записи, xname.org позволяет, но глючит.
- машинка с инетом без dns-сервера на внешнем адресе. Адрес вовсе не обязательно должен быть статическим, dyndns.org работает отлично.
Обозначения
- xxx.ru — подконтрольная зона,
- tx.xxx.ru — зона, за которую отвечает сервер B,
- b.xxx.ru — адрес сервера b.
Настройка зоны и nstx сервера
С зоной все просто: добавляем запись вида
nstx.xxx.ru. IN NS b.xxx.ru.
Далее, на сервере устанавливаем nstx (для debian такой пакет уже есть, остальным, видимо, придется собрать), и настраиваем его:
/etc/default/nstx
# The name of the domain for the tunnel - needed for client and server
NSTX_DOMAIN="nstx.xxx.ru"
# The IP address of the DNS server - needed for client only
NSTX_DNS_SERVER=`grep nameserver /etc/resolv.conf |head -1|awk '{print $2}'`
# uncomment to start nstxd on system startup
start_nstxd=yes
# uncomment to start nstxcd on system startup
#start_nstxcd=yes
# uncomment to bring up tun0 automatically
ifup_tun=tun1
# uncomment to tell nstx to bind to a specific interface
#NSTX_IFACE=
/etc/network/interfaces
iface tun1 inet static
address 10.0.0.1
netmask 255.255.0.0
tunctl_user nstxd
mtu 500
mtu 500 обязательно, иначе большие пакеты не будут влазить в ограничения на FQDN.
Помимо этого нужно чтобы пакеты с tun1 заворачивались в инет. Делается это стандартными средствами iptables/uif/что у вас там.
Настройка клиента
На таблетку ставим пакет nstx из моего репозитория. Помимо стандартных скриптов и утилит, содержат два скрипта nstx-on и nstx-off для включения и выключения использования nstx.
В /etc/network/interfaces:
iface tun0 inet static
address 10.0.0.2
netmask 255.255.0.0
mtu 500
В /etc/default/nstx нужно указать лишь параметр NSTX_DOMAIN, параметр start_nstxcd указывать НЕ нужно, запускать его при загрузке нам ни разу не нужно.
Собственно, все.
Использование
Резвым галопом идем в ближайшую "Шоколадницу" или Мак или просто встаем посреди Тверской. Ловим BeeLine_WiFi или MTS/Tascom. От рута говорим nstx-on. После чего пробуем ping www.ru. Если вы все правильно сделали, должен быть инет.
Если не работает
Если вдруг не работает, то можно проверить следующее:
- запускаем nstxd на компьютере B с ключом -g:
/usr/sbin/nstxd -i b.xxx.ru -C /var/run/nstxd -u nstxd nstx.xxx.ru -g
При запущенном nstxcd на таблетке, демон nstxd должны выводить с интервалом в полсекунды небольшие DNS-запросы. При попытках пинга на стороне клиента, эти запросы должны перемежаться запросами большей длины (с данными).
- проверить имена tun-интерфейсов за которые зацепляются nstxd и nstxcd. При явном запуске этих демонов они пишут с каким интерфейсом они работают. В соответствии с этим, скорректируйте конфиги.
- взять tcpdump и позырить что же не так :).