Настройка PPTP в Linux

Обозначения

Примеры вводимых команд набранны моноширинным шрифтом. Если пример начинается с символа $, то для выполнения команды лостаточно прав обычного пользователя. Если пример начинается с символа #, то для выполнения команды необходимы права суперпользователя(root). Для внесения изменений во все файлы, упоминаемые в тексте, необходимы права суперпользователя.

Предварительная подготовка

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

Установка драйверов для сетевой карты.

Большинство современных дистрибутивов Linux вполне в состоянии автоматически определить и настроить сетевую карту. Это происходит либо при установке операционной системы, либо позже с помощью утилиты настройки. В дистрибутивах-потомках Linux Mandrake можно воспользоваться утилитой draknet, в Red Hat Linux и аналогичных можно запустить linuxconf, также можно воспользоваться утилитой ifconfig или вручную отредактировать network-scripts. Если вы не знаете какой командой настраивается сеть у вас, имеет смысл обратиться к изготовителю дистрибутива, или прочитать документацию.

Исправление таблицы маршрутизации

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

$ ping 10.10.1.1
PING 10.10.1.1 (10.10.1.1) from 10.2.52.10 : 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=253 time=13.6 ms
...

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

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
<адрес подсети> 0.0.0.0         <маска подсети> U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         <адрес шлюза>   0.0.0.0         UG    0      0        0 eth0

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

Немедленно эти изменения можно сделать выполнив две команды:

# route del default
# route add net 10.0.0.0 netmask 255.0.0.0 gw <адрес шлюза> eth0

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

Для дистрибутивов-потомков RedHat подойдёт следующее решение. Заменяем шлюз по умолчанию дял локальной сети на статический маршрут. Для этого в файле /etc/syconfig/network изменяем строчку

GATEWAY=<адрес шлюза>

на

GATEWAY=""

После чего добавим к файлу /etc/sysconfig/static-routes следующую строчку:

eth0 net 10.0.0.0 netmask 255.0.0.0 gw <адрес шлюза>

Если всё было сделано правильно то после следующей загрузки таблица маршрутизации будет приблизительно следующей:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
<адрес подсети> 0.0.0.0         <маска подсети> U     0      0        0 eth0
10.0.0.0        <адрес шлюза>   255.0.0.0       UG    0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo

Для проверки парвильности не обязательно перезагружать компьютер. Достаточно перезагрузить сетевую подсистему:

# service network restart
...

Если всё так и есть, то вы готовы к следующему этапу.

Создание PPTP-тоннеля

Перед настройкой тоннеля может потребоваться внесение изменений в конфигурацию ядра. Эти изменения являются частью настройки ppp. Если ядро скомпилировано с поддержкой PPP, то требуется наличие следующих строчек в /etc/modules.conf:

alias /dev/ppp          ppp_generic                                                                      
alias char-major-108    ppp_generic                                                                      
alias tty-ldisc-3       ppp_async                                                                        
alias tty-ldisc-14      ppp_synctty                                                                      
alias ppp-compress-21   bsd_comp                                                                         
alias ppp-compress-24   ppp_deflate                                                                      
alias ppp-compress-26   ppp_deflate

Для этого необходимо установить пакет pptp-client или другой, предоставляющий аналогичную функциональность. Также потребуется ppp не ниже версии 2.3.1. Настроить тунель проще всего с помощью программы pptp-command. То что она делает совсем несложно повторить вручную. Для этого создадим файл /etc/ppp/peers/<имя соединения> следующего содержания:

name <имя пользователя>
remotename  <адрес pptp сервера>
file /etc/ppp/options.pptp

Так же потребуется добавить к файлу /etc/ppp/chap-secrets строку вида:

<имя пользователя>     <адрес pptp сервера>    <пароль>

Это всё, что делает команда pptp-command. Завершим настройку тоннеля описанием опций pppd в файле /etc/ppp/options.pptp:

lock
+chap
# отключаем всю компрессию
nobsdcomp
nodeflate
noaccomp
nopcomp
# включаем шифрование от MS (в случаях, когда шифрование выключено следует закомментировать решеткой строки mppe-128
# mppe-stateless)

mppe-128
mppe-stateless
mtu 1000
mru 1000
defaultroute
# получаем IP-адрес динамически
noipdefault
ipcp-accept-local
ipcp-accept-remote
ktune
noauth
pty "/usr/sbin/pptp <адрес pptp сервера> -nolaunchpppd"

Если все предыдущие действия были выполнены без ошибок то теперь соединение можно установить командой:

# pppd call <имя соединения>

Разрыв соединения производится командой:

# kill `cat /var/run/ppp0.pid`

Если устанавливается только одно соединение, и ppp не используется для других целей, то можно использовать команду

# killall pppd