Все началось с того, что у меня появилось страстное желание создать локальную сеть в моем
подъезде.
К моему счастью, у меня нашелся весьма активный единомышленник в этом вопросе. Мы, потратив один из выходных дней,
соединили 6 компьютеров в нашем подъезде в локальную сеть (на данный момент уже 7). Наша сеть подключена в Интернет
через
ADSL-модем, для подключения используется технология VPN (Virtual Private Network). В след за этим возникло желание
поставить в сеть HTTP-сервер. Выбор ограничивался маломощным компьютером типа Celeron 600 или около того, т.к.
финансовые возможности не позволяли приобрести что-то более быстродействующее. Краем уха, когда-то, где-то, от
кого-то я слышал, что с помощью Linux можно достичь довольно высокой производительности на слабых машинах. И
вот в моей жизни началась эпоха Linux!
Первым делом посетил пару-тройку форумов и узнал, что дистрибутивов бывает тьма-тьмущая
и все они самые лучшие. На слуху было в основном название Red Hat Linux. После непродолжительного изучения данного
вопроса я проследовал на рынок, где мне на глаза попалась коробочка красного цвета с надписью Red Hat Linux AS -
тутже ее и приобрел. В качестве тренировки было решено ставить Linux второй системой на мой домашний компьютер.
Перед этим, на всякий случай, я сделал резервные копии со всего мало-мальски ценного на
своем компьютере, отвел под Linux отдельный диск и начал установку по средствам CD-boot. Да, хочу сразу сказать,
что был поражен тем, что на данный момент UNIX системы далеко ушли в вопросах User Friendly Interface - меня
встретела весьма приятная программа-инсталятор, с помощью которой я успешно закончил процес установки. Далее
меня подстерегала серия засад: система не смогла самостоятельно обнаружить мою сетевую карту и в неправильной
кодировке отображала имена и содержание подмонтированных win-дисков - как оказалось ядро просто не поддерживает
файловую систему NTFS и кодировку KOI8-R. Это был настоящий удар для newbie in Linux и я решил попробывать
дистрибутив Mandrake 10.0 . В этот раз, на первом этапе все оказалось гораздо проще: система сама нашла
все мое оборудование (даже мой winmoden Lucent, правда сказала, что работать с ним отказывается по
идеологическим причинам), автоматически подмонтировала win-диски и не возникло проблем с кодировками.
На горизонте появилась новая и как оказалось в дальнейшем весьма серьезная проблема - подключение к сети
Интернет через ADSL(напомню, что работать с моим winmodem'ом система отказалась, да и грех было не
истользовать кабельное подключение взамен совкового Dial-up).
Конфигурация моей сети:
Задача состояла в том, чтобы установить VPN-соединение с сервером провайдера. Решить данный вопрос
по средствам "Панели управления" никак не удавалось, пытался даже следовать инструкциям моего провайдера. Поисковые
машины привели меня на следующий сайт:
На данном сайте расположены пошаговые инструкции для установки pptp-клиента для различных
дистрибутивов.
У меня как у новичка Linux в процессе установки возникли следующие трудности:
Почти все пакеты при установке говорили, что имеются неудовлетворенные зависимоси, т.е. для установки им были
необходимы еще пакеты. Часть RPM-пакетов я нашел на установочном диске, а часть пришлось выкачивать из интернета.
Хочу порекомендовать искать пакеты с помощью www.yahoo.com. Честно говоря, я думал,
что буду качать пакеты до бесконечности, т.к. каждый последующий пакет требовал еще 2-3 пакета для удовлетворения
своих зависимостей.
Один из пакетов отребовал установить для удовлетворения зависимостей дополнительный пакет, при попытке установить
затребованный пакет получил сообщение - пакет уже установлен. При попытке его удалить - пакет не установлен! После
довольно продолжительных попыток проблема решилась следующим образом:
#rpm -Uvh --force *******.rpm
Т.е пришлось силой установить пакет. После данной процедуры зависимость была удовлетворена.
Ну вот, все зависимости я удовлетворил, выполнил пошаговую инструкцию до конца - встал вопрос как запустить все это!
Вот как:
#pptpconfig
И если Вы все сделали правильно, то вы должны увидеть следующее:
Далее заполняем все необходимые данные для нашего соединения:Name - произвольно, Server - IP сервера ISP
(в моем случае 81.54.25.67). Владку Routing рекомендую не заполнять (пока). На счет вкладки Encryption(шифрование)
необходимо проконсультироваться у Вашего провайдера или выяснить экспериментальным путем. Затем нажимаем ADD (добавить)
и у Вас появилось новое (или первое) соединение в списке! Если Вы захотите внести изменения в настройки, то
необходимо выбрать редактируемое соединение, сделать требуемые изменения и обязательно нажать UPDATE.
Выбираем соединение из списка и жмем Start! В новом окне видим ход подключения. Если все закончилось фразой CONNECTED,
то все хорошо, если нет, то необходимо проверить настройки LAN(сервер ISP должен пинговаться без всяких дополнительных
соединений через ADSL-modem как через шлюз или может быть необходимо прописать что-то типа route add 81.54.25.67 gw 192.168.6.1 dev eth0 -
т.е. все IP-пакеты с адресом назначения 81.54.25.67 отправлять на адрес 192.168.6.1 через сетевой интерфейс eth0(сетевая карта)
или необходимо проверить логин/пароль, IP сервера провайдера, праввильность алгоритма шифрования - в любом случае
причина невозможности установить связь отобразится в всплывающем окне, правда на английском языке.)
В результате соединения у нас появился еще один виртуальный сетевой интерфейс ppp0 и конфигурация моей сети стала следующей:
Проверить данную конфигурацию можно с консоли (некоторые команды требуют привилегий root):
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0D:88:6C:1A:5 - моя сетевая карта
inet addr:192.168.6.8 Bcast:192.168.6.255 Mask:255.255.255.0 - мой локальный сетевой адрес
inet6 addr: fe80::20d:88ff:fe6c:1a5e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5197 errors:0 dropped:0 overruns:0 frame:0
TX packets:9270 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1911302 (1.8 Mb) TX bytes:982001 (958.9 Kb)
Interrupt:5 Base address:0xd400
lo Link encap:Local Loopback - интерфейс loopback(обратная петля)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1773 errors:0 dropped:0 overruns:0 frame:0
TX packets:1773 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:100630 (98.2 Kb) TX bytes:100630 (98.2 Kb)
ppp0 Link encap:Point-to-Point Protocol - а вот и наш виртуальный интерфейс
inet addr:81.25.38.36 P-t-P:81.25.37.2 Mask:255.255.255.255 - IP-адреса и тип point to point
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1400 Metric:1
RX packets:306 errors:0 dropped:0 overruns:0 frame:0
TX packets:315 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:32747 (31.9 Kb) TX bytes:23751 (23.1 Kb)
таблицу маршрутизации можно посмотреть так:
# ip route show
81.54.25.67 via 192.168.6.1 dev eth0 - Это так называемый служебный маршрут. Он необходим для
создания и поддержания VPN-соединения
192.168.6.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
Из данной таблицы видно, что все пакеты, идущие в сеть 192.168.6.0 (/24 - маска сети т.е. 24 бита слева равны 1)
перенаправляются в интерфейс eth0, т.е. в мою локальную сеть, пакеты идущие в сеть 127.0.0.0 отправляются в обратную петлю,
пакеты идущие к серверу 81.54.25.67 необходимо отправлять по адресу 192.168.6.1 (наш adsl-modem)
через интерфейс eth0, а что делать с остальными пакетами( например идущими на сайт www.google.com) ничего не сказанно, т.е в данном случае
интернет работать не будет, хотя соединение с провайдером установлено.
Нам необходимо правильно прописать все маршруты в результате чего таблица маршрутизации в моем случае приобрела
следующий вид:
ip route show
81.54.25.67 via 192.168.6.1 dev eth0
81.25.37.2 dev ppp0 proto kernel scope link src 81.25.37.94 -
Эта строчка добавляется сама при старте ppp0
192.168.6.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 81.25.37.2 dev ppp0 - Об этой строчке см. ниже
Последняя строчка в этой таблице далась мне потом и кровью - она говорит о том, что все пакеты, которые не соответствуют
условиям, указанным в предыдущих строчках таблицы маршрутизации, должны отправляться на адрес 81.25.37.2(локальный
адрес сетевого интерфейса ppp0) через сетевой интерфейс ppp0. Необходимо заметить, что адрес нужно указать именно
локальный, а узнать его можно с помощью все той же команды #ip address show или #ifconfig.
С такими установками у меня все заработало...
Оставалась еще одна проблема - при старте ppp0 я должен был каждый раз руками переписывать таблицу маршрутизации,
что совсем лишало меня радости от использования Интернета. Процесс должен был быть автоматизирован и решение было найдено!
Необходимо написать bash-скрипт и положить его в /etc/ppp/ip-up.d .Bash-скрипт это просто
перечисление консольных команд у меня он имеет следующий вид:
#!/bin/sh - указываем путь к интерпритатору команд
route add 81.54.25.67 gw 192.168.6.1 dev eth0 - добавляем служебный маршрут для установления
соединения
route del default - Удаляем шлюз по умолчанию 192.168.6.1
(если он устанавливается при старте eth0)
ifconfig ppp0 pointopoint 81.25.37.2 - принудительно устанавливаем
локальный адрес ppp0 = ppp0 адресу сервера провайдера
(хотя для соединения point to point и не важно какие адреса на разных
концах тунеля, но у меня получилось именно при равенстве локального и удаленного адреса
route add default gw 81.25.37.2 dev ppp0
- Добавляем шлюз по умолчанию для всех адресов через локальный адрес
81.25.37.2 интерфейса ppp0
Попробуйте посетить сайт www.yandex.ru. Получилось - поздравляю!
Если нет, то попробуйте зайти по IP адресу: 213.180.204.11 - получилось? Если да, тогда у Вас проблема
с настройкой DNS серверов. Проверьте правильность заполнения вкладки DNS в конфигурации Вашего соединения или обратитесь к
вашему провайдеру, но возможно Вам необходимо дополнительно прописать маршрут к DNS серверам через интерфейс eth0. Если и так
не получилось, то проблема с маршрутизацией (при условии, что связь c провайдером установлена и в апплете pptpcofig
соединение подсвечено зеленым цветом и написанно "RUNNING".
P.S.Данная статья не претендует на полноту и правильность изложения материала и тем более на оптимальность настроек.
В данной статье я просто описал тот путь, который привел меня к успеху. Я с удовольствием выслушаю советы и замечания.