Я, Linux и Интернет...

    Все началось с того, что у меня появилось страстное желание создать локальную сеть в моем подъезде. К моему счастью, у меня нашелся весьма активный единомышленник в этом вопросе. Мы, потратив один из выходных дней, соединили 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-соединение с сервером провайдера. Решить данный вопрос по средствам "Панели управления" никак не удавалось, пытался даже следовать инструкциям моего провайдера. Поисковые машины привели меня на следующий сайт:

pptpclient.sourceforge.net

    На данном сайте расположены пошаговые инструкции для установки pptp-клиента для различных дистрибутивов.
У меня как у новичка Linux в процессе установки возникли следующие трудности:

  1. Почти все пакеты при установке говорили, что имеются неудовлетворенные зависимоси, т.е. для установки им были необходимы еще пакеты. Часть RPM-пакетов я нашел на установочном диске, а часть пришлось выкачивать из интернета. Хочу порекомендовать искать пакеты с помощью www.yahoo.com. Честно говоря, я думал, что буду качать пакеты до бесконечности, т.к. каждый последующий пакет требовал еще 2-3 пакета для удовлетворения своих зависимостей.
  2. Один из пакетов отребовал установить для удовлетворения зависимостей дополнительный пакет, при попытке установить затребованный пакет получил сообщение - пакет уже установлен. При попытке его удалить - пакет не установлен! После довольно продолжительных попыток проблема решилась следующим образом:

    #rpm -Uvh --force *******.rpm

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

  3. Ну вот, все зависимости я удовлетворил, выполнил пошаговую инструкцию до конца - встал вопрос как запустить все это! Вот как:

    #pptpconfig

    И если Вы все сделали правильно, то вы должны увидеть следующее: Окно конфигурации PPTP-клиента

  4. Далее заполняем все необходимые данные для нашего соединения:Name - произвольно, Server - IP сервера ISP (в моем случае 81.54.25.67). Владку Routing рекомендую не заполнять (пока). На счет вкладки Encryption(шифрование) необходимо проконсультироваться у Вашего провайдера или выяснить экспериментальным путем. Затем нажимаем ADD (добавить) и у Вас появилось новое (или первое) соединение в списке! Если Вы захотите внести изменения в настройки, то необходимо выбрать редактируемое соединение, сделать требуемые изменения и обязательно нажать UPDATE.
  5. Выбираем соединение из списка и жмем 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 сервера провайдера, праввильность алгоритма шифрования - в любом случае причина невозможности установить связь отобразится в всплывающем окне, правда на английском языке.)
  6. В результате соединения у нас появился еще один виртуальный сетевой интерфейс ppp0 и конфигурация моей сети стала следующей:

    Схема сети с виртуальным каналом (тунелем) 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) ничего не сказанно, т.е в данном случае интернет работать не будет, хотя соединение с провайдером установлено.
  7. Нам необходимо правильно прописать все маршруты в результате чего таблица маршрутизации в моем случае приобрела следующий вид:
    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.
        С такими установками у меня все заработало...
  8. Оставалась еще одна проблема - при старте 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 
    
  9. Попробуйте посетить сайт www.yandex.ru. Получилось - поздравляю!
    Если нет, то попробуйте зайти по IP адресу: 213.180.204.11 - получилось? Если да, тогда у Вас проблема с настройкой DNS серверов. Проверьте правильность заполнения вкладки DNS в конфигурации Вашего соединения или обратитесь к вашему провайдеру, но возможно Вам необходимо дополнительно прописать маршрут к DNS серверам через интерфейс eth0. Если и так не получилось, то проблема с маршрутизацией (при условии, что связь c провайдером установлена и в апплете pptpcofig соединение подсвечено зеленым цветом и написанно "RUNNING".

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

Обсудить статью, задать вопрос.

Денис Котишевский © 2005
11 мая 2005 года
mailto: kotishevski[sobaka]km[dot]ru
антиспам

[sobaka] заменить на @
[dot] заменить на .

Яндекс цитирования