У нас сегодня продолжение разговора про сетевой уровень тцпип в линукс.

Это продолжение должно носить более практический характер.

Вместо последней лекции будет демонстрационное решение всех домашних заданий.

Сегодня про разные разности связанные с третьим сетевым уровнем.

Начну с рассказа про рашн впн. Пржде чем, давайте немножко поговрим про то, что такое впн.

Немножко, потому что множко будет в следующем семестре.

Пока важно знать что впн это не протокол. Это такая технология, способ организации сетевого окружения, при котором у вас компьютер подключается к локальной сети, но на самом деле эта локальная сеть разбросана по различным абонентам и является виртуальной. Виртуальная охначает, что физически эта сеть может как локальная не существовать.

Идея впн как технологии состоит в том, что всевозможные конторы устраивали свои локальные сетки с пониженными требованиями к безопасности и абоненты могли бы находиться в разных местах.

Много современных провайдеров предоставляют доступ к интернету таким способом -- вам в квартиру приходит провод, и даже если вы не заплатили за интернет вы можете пронаблюдать трафик который бегает по нему. Еще вм и ип адрес выдадут. Этот адрес будет интранет. И вы сможете увидеть блок локальных сетей, внутри которых безлимитный трафик, файлопомойка, вирусы, все удовольствия. А чтобы получить интерент вы должны настроить впн. при этом словом впн провайдер может называть что угодно. Начиная от банального пптп (peer to peer transfer protocol).

Идея пптп. У вас есть впн-сервер, от него уходят специального вида пакеты. Они попадают в конце концов на впн клиент. После применения к этим пакетам нужного протокола у вас появляется еще один интерфейс, например, tun0. На нем у вас появляется еще один айпишник, маршрут, и весь интернет трафик ходит через тун0. Принимаете езернет пакеты, декапсулируете до прикладного уровня. Натуральная виртуальная локальная сеть, с маршрутизатором в интернет. Впн соединение как правило требует логин-пароль, и управлять такого рода соединениями легче, чем банальным интернетом.

Лектор видал это в очень многих ипостасях, вплоть до пск-авторизации через езернет.

Доходит до того, что бытовые маршрутизаторы за 800 р имебт несколько переключателей на разные типы интернета, и отдельная кнопочка впн.

История про рашн впн, она весьма актуальна к прошлой да и к современной теме разговора тоже.

Еще разз, как происходит настройка. Получаете адрес езернет. У вас есть информация какой адрес у впн сервера, подключаетесь к нему, образуется новый интерфейс, и маршрутизация начинает глядеть в этот новый интерфейс.

Что будет, если впн не будет лежать в локальной сети? У вас адрес 10.1.2.3, а у впн-сервеа 10.100.0.1. Эта схема немедленно сломается. Дефолт роут вас вел в 10.1.21.1/24. Вы устанавливаете подключение к впн серверу, у него адрес типа 123.45.67.8 и маршрут по умолчанию 123.45.67.1. Пакеты до впн сервера будут тыкаться в этот новый дефолт роут и ничего не находить.

Как починить? Пропишем роут с более высоким приоритетом.

10.100.0.1 -> 10.1.2.1

Проблема состоит в том, что некоторые провайдеры, например, Корбина, имеют разные впн-сервера для разных районов. Соответственно вам нужно узнать адрес впн-сервера, прописать роут, и т.д.

Но проблемы только начинаются. Адреса впн-серверов меняются динамически. Что делает народ? Собирает огромные таблицы всех возможных впн-серверов и пробивает их всез в дефолт маршруты.

Корбина говорит. нам все надоело, вот вам днс сервер, спрашивайте у него. Но днс сервер тоже лежит не в локальной сети...

В принципе, написание небольшой примочки, которая бы смотрела какой приехал маршрут по умолчанию и прибивала бы его до 10.0.0.0/8, что бы все что в интернет ходило бы в впн. а по локальной сети -- через старый маршрут, в приницпе решает проблему.

Почему при этом что-то работает в том же виндовсе лектор не знает.

Версия 1 -- в виндовсе есть соответствующий хак.

Вторая гипотеза -- что при настройке езернета приезжают нестандартные параметры дхцп.

Лектор только знает, что dlink dr600 со старой прошивкой в корбине не работает. Вы идете на форум, и там узнаете о существовании специальной прошивки, у которой рядом с пунктом впн есть пункт рашн впн, вы его выбираете и все начинает работать.

Устав с этим всем бороться, люди просто переходят на л2тп, который вроде как стандарт и таких удивительных извращений там никто не додумался сделать.

Это было отступление на тему прошлого раза.

Простая маршрутизация по принципу нормального алгоритма Маркова.

Вообще говря для просто настройки интернета нужно 2 вещи. ип адреса и ип роуты.

ip addr add ....
ip route add default...

Хорошо ли, что для настройки интернета надо говорить командочки от рута? Плохо.

Можно написать стартовый сценарий, который бы от рута все это говорил.

Потом выяснилось, что сетевые настройки бывают доаольно развесистые. Разные дистрибутивы линукс разработали различные способы сетевой настройки. Все они сводились к тому, чтобы разбросать данные о настройкавпо конфигам, а при старте их зажевать и все настроить.

Показательно устроена эта настройка в альт линукс. Изначально схема была разработана для прошивки небольших нестандартных маршрутизаторов у одного белорусского провайдера. Называется etcnet. Главный принцип -- систематизировать все сетевые настройки, а с другой стороны как можно меньше менять. Идея етцнет состоит втом, что прямо куски команд ип аддр ип роут разложить по иерархии файлов вида /etc/net/ifaces/enp0s1/ipv4addr.

Точно также етцнет настраивает фаерволл, тунели, вайфаи, практически все что можно настроить при старте системы.

Достоинство -- даже если вы встретились с нестандартной конфигурацией сети, который недоступен етцнету, то поскольку он просто пачка скриптов на шелле, он легко подвержен модификации.

Главный недостаток всех аналогичных систем инициализации сети состоит в том, что они статические. Не в том смысле, что они статические адреса получают.

Главный недостаток -- оно запускается при старте системы, и когда реально что-то меняется, например, когда пользователь заходит от рута опускает сетвой интерфейс.

Но с ноутбуками и мобильными устройствами оказалось, что у людей должна быть возможность перенастроить сеть без прав рута. Когда это случилось, лектор лично сломал свой вайфай. Когда необходимость динамической и непривелигированной конфигурации стало критичной, развился другой подход. Давайте напишем собственный безопасный апи, который предоставлял бы пользователб необходимые возможности, и дерал бы всю необходимую машинерию. Это же относится к ситуации нашлась сота, пропала сота, нашлось бт устройство, пропало бт устройство. Это све требует служб, которые могут спросить у пользователя ( а не у администратор), не хочет ли он тут чего-нибудь настроить.

Самая популярная network-manager. Пользовательская направленность делает ее менее удобной, чем старинные наборы скриптов. И они плохо уживаются на одном интерфейсе.

Кстати сказать, etcnet сопровождается обильной документацией с примерами (правда, там проблемы с простыми примерами...)

В /etc/net/scripts лежат все пачки скриптов, которые этим занимаются

Способность быть маршрутизатором включатеся и выключается, за это отвечает параметр ядра.

Есть три варианта действий -- воспользоваться командной sysctl, которая лезет в ядро. Например,

sysctl net.ipv4.ip_forward  = 1

Второй вариант

    /proc/sys/net/ipv4/ip_forward 

Туда можно сказать эхо 1. sysctl тоже ходит в тот же файл.

Кстати сказать, все дерево этих файлов покажет вам совокупные настройки ядра, правда их очень много.

Скоре всего ваша система настройки сети сама читает конфиг, в котором написано, надо ли это включить.

Это все хорошо, но лектор вот на своем компьютере сеть не настраивает, она сама настраивается.

Reverse ARP

Помните протокол арп? рарп это проотокол не преобразования одного адреса в другой, а получение ип адреса в ответ на мак. Как космонавт в песне.

Почему он не исопльзуется? Потому что настроить только ип недостаточно, надо настроить еще маршруты.

Народ покумекал, появились еще задачки, и был изобретен протокол прикладного уровня.

BootP

Помимо сетевого адреса предоставлял маршрутизатор по умолчанию, и вообще все необходимое для бездисковой загрузки (адрес сервера, с которого можно скачать сетевой загрузчик).

Примерно из этого состоит начинка протокола BootP.

Потом выяснилось, что этого тоже недостаточно. И разработали протокол, который позволяет по сети узнавать произвольную конфигурационную информацию.

DHCP

Куча стандартных настроек, и возможность добавлять новые по номерам.

Процедура такая. Сначала он кричит "ребята, никто не хочет меня это, отконфигурировать?" -- dhcp discover. Ему несколько дхцп серверов (лучше бы один), посылают оффер -- так настроиться, или вот этак настроиться.

Клиент их рассматривает и посылает выбранному серверу dhcp request. Дальше сервер посылает acknowledgement.

В чем идея такого четырехчастного протокола? Идея состоит в том, что клиент в дисковер включает свои старые настройки, и нужный дхцп сервер может выдать ему старый айпишник, если вдруг он оказался свободен, и если он настроен соответствующим образом.

Обратите внимание, что здесь неспецифицировано, какие настройки будут приезжать в оффере. А их много. До 50 стандартных, и все что хотите в экстеншенах, лишь бы ваш клиент их понимал.

В домашнем задании будет пример готовой настройки дхцп сервера.

PXE

PXE -- загрузка компьютера средствами сетевой карты. Поддержка BootP и tftp. Это комплект по, который позволяет грузитькомпьютер по сети. Такой биос.

Осталось рассказать про одну вещь.

Целевая маршрутизация

У нас есть стандартный алгоритм маршрутизации, о котором мы говорили в прошлый раз.

Таблица маршуртизации и в ней записи практически одного вида подсеть в маршрутизатор.

Эти записи упорядочиваются по сетевой маске и когда пакет нужно маршрутизировать, то происходит просмотр таблицы маршрутизации начиная от более приоритетных к менее приоритетным.

Все это здоров, пока мы реаем абстрактную задачу обеспечения воможности доставки пакета.

Но иногда некоторые пакеты не доставлять. Или пакеты от некоторых ипшников не доставлять. Итд.

Есть интернет медленный и дешевый или дорогой и быстрый. И вы хотите чтобы одни пользователи ходили через быстрый, а другие через медленные.

Задача -- на основании ип пакета принять решение о маршрутизации. Стандартная маршрутизация пользуется только адресом получателя. Хотелось бы пользоваться еще как минимум адресом отправителя.

С этим тоже справляется линуксовый ип-стек, для этого служит командочка ip rule.

Три таблицы маршрутизации.

main, которая выдается ip route list table main. В ней в простейшем случае две записи -- маршрут по умолчанию и маршрут на локальную сеть. На самом деле при обеспечении доставки в локальную сеть надо гораздо больше информации иметь, эта информации хранится в табличке local -- какой бродкаст, итп. Еще есть табличка default, она пустаю. Просматриваются в порядке local-main-default. При этом маршрут по умолчанию лежит в табличке main.

Вам ничего не мешает создать свою собственную табличку маршрутизации за каким-нибудь номером.

    ip rule from boss_ip table 200 

И дальше с помощью ip route заполнять эту табличку.

В результате все решения для маршрутизации с этих ипшников будет происходить с использованием не таблички main, а таблички 200. Если попроавить один конфиг, то можно присвоить этой табличке названия.

Если вы хотите чего-то более хитрого, например, принимать решения не по полям ип пакета, то на помощь придет фаерфолл, который умет раскрашивать пакеты. Цвета можно использовать в правилах настройки -- fwmark.

Это была попытка написать фаерволл сетевого уровня, но это, конечно, не так интересно и большая часть хитрых функций фаерволла находится уровнем выше.

Домашнее задание.

Будет две машины.

В каждой будет 2 сетевых интерфейса. В первой один будет смотреть в интернет, а второй в специальную виртуалбоксовую сеть. Вторая будет настроена как клиент первой. второй интерфейс у нее будет смотреть в интернет, но туда она ходить по умолчанию не будет.

Весь смысл домашнего задания будет посомтреть как настроена первая машина в смысле маршрутизации, как настроен там дхцп, посмотреть это у второй машины. И как на второй машине помухлевать с таблицей маршрутизации, так чтобы она для некоторых сайтов ходила через другой интерфейс, и так далее.

LecturesCMC/LinuxNetwork2013/Conspects/05 (последним исправлял пользователь Allena 2013-11-16 14:00:25)