Шукати в цьому блозі

четвер, 15 вересня 2016 р.

Налаштування IPv6 у RouterOS як клієнта для SLAAC+DHCPv6

Багато статей є про те як налаштувати IPv6 у RouterOS через тунель-брокера. Але мало де написано про те як налаштувати IPv6 у RouterOS коли підключення відбувається за схемами SLAAC, SLAAC+DHCPv6… Спробуємо виправити цей недолік.

Про те, що уявляє з себе функціонал SLAAC, SLAAC+DHCPv6 та DHCPv6 можна прочитати, наприклад, тут.

Так от, наш провайдер надає нам IPv6 за схемою SLAAC+DHCPv6: надає нам /64 на підключенні та делегує якусь мережу, щоб ми могли її вже роздати у себе. Ми будемо у себе реалізовувати лише функціонал SLAAC.

Невелике зауваження, наразі налаштовано та протестовано RouterOS версії 6.36.3. Рік тому була інша версія і синтаксис щодо налаштувань, з того часу, дещо змінився.

Налаштовуємо RouterOS:

/ipv6 nd set [ find default=yes ] advertise-dns=yes interface=bridge-local ra-interval=1m40s-3m20s
/ipv6 dhcp-client add add-default-route=yes interface=ether1-gateway pool-name=v6pool request=address,prefix
/ipv6 address add eui-64=yes from-pool=v6pool interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::1/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::2/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::3/10 advertise=no interface=bridge-local

ND

За замовченням ND interface дивиться у all, тобто на всі інтерфейси. Ми ж не хочемо роздавати той сервіс, що отримаємо, назовні, хочемо роздати тільки своїм абонентам, тому вносимо відповідні правки у конфігурацію за замовченням. Так як видалити її не можна то робиться саме встановлення властивостей у наявну конфігурацію. Можна було б зробити її неактивною й додати нову, але, як на мене, наведений шлях більш вірний.

Для ND встановлюємо внутрішній інтерфейс. Кажемо про те, що маємо оповіщати в мережу наявні DNS. Опції managed-address-configuration  та other-configuration не встановлюємо, звісно якщо не хочемо реалізувати схему відмінну від чистого SLAAC.

DHCPv6 клієнт

Далі, налаштовуємо dhcpv6 клієнта на зовнішньому інтерфейсі. Кажемо, що отримана інформація має використовуватися для встановлення маршруту за замовченням, а також має динамічно організуватися пул префіксів IPv6 які були делеговані нам від провайдера.

IPv6 адреса на локальному інтерфейсі

Наступним кроком налаштовуємо внутрішній інтерфейс таким чином щоб він брав адрес з організованого пулу та формував його за eui-64. Хтось захоче інакше, скаже, що це небезпечно, не питання, можна й інакше:
/ipv6 address add from-pool=v6pool address=::1/64 interface=bridge-local

Клієнти у локальнїй мережі

Зауваження щодо Windows

Якщо явно не вказати ОС Windows що треба використовувати IPv6-unicast DNS-сервери то за замовченням запити будуть відправлятися до спеціальних site-local адрес fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3. Також DNS можна вказати вручну, використовуючи netsh.

Підтримка fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3

Підтримку адрес fec0:0:0:ffff::1, fec0:0:0:ffff::2 та fec0:0:0:ffff::3 можна організувати на Mikrotik, наприклад, так як наведено вище:
/ipv6 address add address=fec0:0:0:ffff::1/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::2/10 advertise=no interface=bridge-local
/ipv6 address add address=fec0:0:0:ffff::3/10 advertise=no interface=bridge-local

Статичне встановлення DNS серверів

Також DNS-сервери для IPv6 можна встановити статично. Наприклад 6-to-4:
netsh interface ipv6 add dnsservers 10 index=1 2001:4860:4860::6464
netsh interface ipv6 add dnsservers 10 index=2 2001:4860:4860::64
та/або публічні google DNS:
netsh interface ipv6 add dnsservers 10 index=3 2001:4860:4860::8888
netsh interface ipv6 add dnsservers 10 index=4 2001:4860:4860::8844
або ж адреси які надає провайдер.

Disabling RFC 4941 IPv6 Privacy Extensions in Windows

За замовченням Windows періодично генерить нову IPv6 адресу у разі чого деякі ресурси у мережі починають лаятись на те, що у користувача змінилася адреса і припиняють коректно працювати. Лікується це просто і не потребує перезавантаження:
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent
netsh interface ipv6 set privacy randomizeidentifiers=disabled store=persistent
Але знов-таки eui-64…

Зауваження щодо Linux

З Linux також все просто. Кажемо:
sysctl net.ipv6.conf.eth0.accept_ra=1
sysctl net.ipv6.conf.eth0.autoconf-1
sysctl net.ipv6.conf.eth0.hop_limit=64
І у налаштуваннях мережі кажемо, що для IPv6 налаштування мають отримуватися автоматично. Не забудьте про hop_limit! Чомусь у Debian-і за замовченням він був встановлений у 0, від чого, коли робився ping6, отримували повідомлення: "Time exceeded: Hop limit".

середа, 13 липня 2016 р.

RouterOS/Mikrotik: гостьове підключення та боротьба з халявщиками.

Організувати на Mikrotik гостьовий wifi це справа добра, але, як загальновідомо, шара об'єму не має то завжди окрім мобільних пристроїв (проти яких ніхто особливо нічого не має) з'являються халявщики з ноутбуками, які вважають, що торенти на гостьовому це норма. Ні, не норма.

Тобто, мета, залишити доступ для будь-яких Android, iPhone, WindowsPhone і, по можливості, блокувати будь-яких інших "абонентів".

Все це робимо на Mikrotik 2011UiAS-2HnD, хоча певно без зайвих зусиль перенесеться та підійде до будь-яких інших моделей.

Рецепт, у скриптах.

Скрипт dhcp-make-static-guest:

/ip dhcp-server lease make-static [ find server="guest" and address!="guest-dhcp" ];
/ip dhcp-server lease set [ find server="guest" and address!="guest-dhcp" ] address="guest-dhcp" always-broadcast=no;
Тобто для dhcp серверу, який обслуговує guest підключення, всі підключення у lease робляться статичними. Другим кроком, всім їм замість статичної адреси призначається адресний пул, в який розрахований для гостьових підключень. Таким чином при кожному наступному підключення гість має можливість отримати будь-яку іншу адресу з пулу і не конфліктувати з іншими. Якби адреса була статичною то велика вірогідність, що адреси б, наприклад, збігалися.
Скрипт dhcp-make-static-guest варто запускати за розкладом, але не рідше ніж виділено lease time.
Далі, для статичних гостьових записів у dhcp lease проводимо регламентну обробку, а саме:

  • блокуємо доступ для записів у яких hostname є пустим;
  • блокуємо доступ для записів у яких запис не відповідає певним ознакам (наприклад всі Android пристрої мають hostname який починається з android).
Скрипт reglament:
:foreach i in=[/ip dhcp-server lease find server="guest"] do={

  :local mac [/ip dhcp-server lease get $i mac-address];
  :local hostname [/ip dhcp-server lease get $i host-name];
  :local blockaccess [/ip dhcp-server lease get $i block-access];
  :local lenhostname [ :len $hostname ];

  :if ($lenhostname<1) do={
    # Block Access for Hosts whith empty hostname.

    /ip dhcp-server lease set [ find mac-address=$mac ] block-access=yes

  } else={
    # Block Access for another categories.

    :local hn;
    :local illegal true;

    if ($illegal) do={
      :set hn [ :pick $hostname 0 7 ];
      if ([ :find $hn "android" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal) do={
      :set hn [ :pick $hostname 0 7 ];
      if ([ :find $hn "Windows" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal) do={
      :set hn [ :pick $hostname 0 6 ];
      if ([ :find $hn "iPhone" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal) do={
      :set hn [ :pick $hostname 0 4 ];
      if ([ :find $hn "iPad" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal) do={
      :set hn [ :pick $hostname 0 9 ];
      if ([ :find $hn "Microsoft" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal) do={
      :set hn [ :pick $hostname 0 10 ];
      if ([ :find $hn "BLACKBERRY" -1 ]=0) do={
        :set illegal false;
      }
    }

    if ($illegal && !$blockaccess) do={
      :put "Block-Access: $mac $blockaccess";
      /ip dhcp-server lease set [ find mac-address=$mac ] block-access=yes
    }

  }
}
Додаємо виклик цих скриптів у розклад:
/system scheduler add interval=2m30s name=reglament on-event="/system script run dhcp-make-static-guest ;\r\
    \n/system script run reglament ;\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=jan/01/1970 start-time=00:00:00

На додаток, також можна спробувати додати деяких "незручностей" халявщикам, що бажають тягати великі файли через гостьове підключення. Скажемо у reglament додати:
# Disable guest subscribers who exceed the limit for a single connection.
:foreach wirelessClient in [/interface wireless registration-table find  interface="wlan2-guest" ] do={
  :local macAddress [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=mac-address];
  :local bytes [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=bytes];
  :local posComma [ :find $bytes "," -1];
  :local RXbytes [:pick $bytes 0 $posComma];

  :local deregister false;
  :if ($RXbytes > 20000000) do={ 
    :set deregister true;
  }
  if (deregister) do={
    :put "Deregistration: $macAddress $bytes $RXbytes";
    /interface wireless registration-table remove [ find mac-address=$macAddress ]
  }
}
Тут ми "рубаємо" всі wifi-підключення по яким пройшло/прийнято більше 20 мільйонів байт. Повірте, що жодна web-сторінка за одну сесію не віддасть такий обсяг інформації. Ну, а кому треба то той перепідключиться до гостьового доступу. Принаймні більша частина сучасних пристроїв та операційних систем це робить автоматично.

вівторок, 24 травня 2016 р.

regexp - тільки номери мобільних операторів України.

Постало питання перевіряти номери телефонів на відповідність до будь-якого мобільного оператора України. Орієнтуючись на коди операторів, станом на травень 2016, вийшов от такий регулярний вираз:
^(\+?38)?0[ -]*(((50|6[3678]|73|9[1-9])[ -]*[0-9]{3}[ -]*[0-9]{2}[ -]*[0-9]{2})|(89[ -]*[1-9][0-9]{2}[ -]*[0-9]{2}[ -]*[0-9]{2}))$
Номер має бути представлений у форматах +380 XX XXX XX XX або 0XX XXX XX XX.
Для зручності:
^(\+?38)?0[ -]*(
((50|6[3678]|73|9[1-9])[ -]*[0-9]{3}[ -]*[0-9]{2}[ -]*[0-9]{2})|
(89[ -]*[1-9][0-9]{2}[ -]*[0-9]{2}[ -]*[0-9]{2})
)$
Коди мобільних операторів України бралися з Wikipedia.

вівторок, 19 квітня 2016 р.

Сортування ip-адрес у консолі

Постало питання у виводі на консоль відсортувати ip-адреси (v4). Виявилося, що це робиться доволі просто, через стандартну команду sort:
$ nmap -sP 10.100.1.* 2>&1 >/dev/null
$ ip neigh show | \
  awk '$4~/^INCOMPLETE$/ { print $1 }' | \
  sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n

  • -t . : Set field to . (dot) as our IPs separated by dot symbol;
  • -n : Makes the program sort according to numerical value;
  • -k opts: Sort data / fields using the given column number. For example, the option -k 2 made the program sort using the second column of data. The option -k 3,3n -k 4,4n sorts each column. First it will sort 3rd column and then 4th column.

середа, 16 березня 2016 р.

Debian: встановлення Adobe Reader

Завантажуємо Adobe Reader 9.5.5 enu (AdbeRdr9.5.5) і встановлюємо acroread.
wget http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb
sudo aptitude install gdebi
sudo gdebi AdbeRdr9.5.5-1_i386linux_enu.deb
acroread
Варто зауважити, що Adobe припинила випуски та підтримку acroread-ера для Linux.

понеділок, 14 березня 2016 р.

Gnome3 - іконки на робочій стільниці

Як можна помітити, то за замовченням gnome3 не висвітлює на робочій стільниці жодних іконок. Але цю поведінку можна змінити.
Для цього нам знадобиться… правильно - консоль!
Запустимо gsettings та збережемо, про всяк випадок, всі поточні налаштування:
gsettings list-recursively | tee gsettings.keys.bak
Що ж до задачі висвітлення іконок на робочій стільниці gnome3 нас цікавлять:
gsettings get org.gnome.desktop.background show-desktop-icons
gsettings get org.gnome.nautilus.desktop volumes-visible
Ключ show-desktop-icons у схемі org.gnome.desktop.background та ключ volumes-visible у схемі org.gnome.nautilus.desktop треба встановити у значення true щоб отримати бажаний результат.
# show files on desktop
gsettings set org.gnome.desktop.background show-desktop-icons true

# show shares on desktop
gsettings set org.gnome.nautilus.desktop volumes-visible true

# restart nautilus
nautilus -q
nautilus
Створювати та редагувати посилання до додатків можна за допомогою додатку gnome-desktop-item-edit.

Gnome3 - початковий автоматичний запуск додатків

При спробі знайти засіб для налаштування автоматичного запуску додатків при вході у gnome3 google наполегливо відсилає нас на сторінки де рекомендується застосувати
gnome-session-properties
але треба зауважити, що цей додаток є застарілим. Замість нього можна використати
gnome-tweak-tool
де можна перейти у пункт "Початкові програми". Але, завжди є але. А якщо хочеться додати те чого немає у наданому меню? Тоді все також доволі просто - консоль! Переходимо у
cd .config/autostart/
і створюємо desktop-файл з описом додатка. Наприклад - xkb-lang.desktop:
[Desktop Entry]
Exec=/home/olden/bin/xkb-lang.sh
Hidden=true
Name=XKB-Lang
Icon=xterm
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
Якщо після цього зайти у gnome-tweak-tool то можна побачити, що цей додаток буде відтворюватись у меню "Початкових програм" і, відповідно, буде запускатися при вході у gnome3.