Может кому пригодиться. У меня все получилось!!!
Просто о сложном. VPN для начинающих.
Настраивать VPN-соединение мы будем по шагам. В конце каждого шага - шаг проверки. Все команды в командной строке вводятся от имени суперпользователя (root). Готовы? Тогда вперед!
[править] Что нам нужно для работы
Для поднятия и настройки VPN-соединения нам потребуются всего две программы - ppp и pptp. Программа ppp с вероятностью 99% уже стоит в вашем дистрибутиве, пакет, содержащий pptp, в разных дистрибутивах называется по-разному, в основном pptp-linux. После установки в системе должны присутствовать два исполняемых файла - /usr/sbin/pppd и /usr/sbin/pptp. Вкратце - pptp создает туннель к VPN-серверу, через который ppp соединяется и работает как обычное модемное соединение.
Естественно, для поднятия соединения нам необходима рабочая локальная сеть и данные провайдера об IP (или имени) VPN-сервера, VPN-логине и VPN-пароле. Также пригодится информация об используемом протоколе аутентификации и о наличии шифрования траффика. Если ее нет - ничего страшного. Подавляющее большинство провайдеров используют протокол аутентификации MS-CHAP v2, а о наличии шифрования нам подскажут логи ошибок pppd.
Подсказка: Если у вас стоит MS Windows и там поднято VPN-соединение, его параметры можно посмотреть на вкладке соединения "Сведения". Нас интересуют параметры "Проверка подлинности" и "Шифрование".
Итак, провайдер (в нашем случае это АИСТ, 100мбит/с) снабдил нас следующей информацией:
Локальная сеть:
Код
IP: 10.0.202.79
Маска подсети: 255.255.255.192.
Шлюз (gateway): 10.0.202.65
DNS1: 81.28.160.1
DNS2: 81.28.160.1111
VPN параметры:
Код
Имя VPN-сервера: server.avtograd.ru
Логин: VPN_LOGIN
Пароль: VPN_PASSWORD
Проверка работоспособности локальной сети
Если сеть уже настроена, мы должны увидеть примерно следующее
Консоль: [root@myhost sergo]# ifconfig eth0
Код
eth0 Link encap:Ethernet HWaddr 00:1A:4D:4F:DA:0B
inet addr:10.0.202.79 Bcast:10.0.202.127 Mask:255.255.255.192
inet6 addr: fe80::21a:4dff:fe4f:da0b/64 Scope:Link
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:230416 errors:0 dropped:0 overruns:0 frame:0
TX packets:199075 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30732835 (29.3 MiB) TX bytes:31756887 (30.2 MiB)
Interrupt:16 Base address:0xe000
или
Консоль: [root@myhost sergo]# route
Код
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.202.64 * 255.255.255.192 U 0 0 0 eth0
loopback * 255.0.0.0 U 0 0 0 lo
default 10.0.202.65 0.0.0.0 UG 0 0 0 eth0
Если ничего подобного не выводится,поднимаем сеть и указываем в качестве шлюза по умолчанию наш шлюз:
Код
ifconfig eth0 статический_ip_адрес_машины netmask 255.255.255.155 up
route add default gw 10.0.202.65
(для получения динамического ip это будет
Код
ifconfig etho -dynapic up
шлюз он должен определится сам)
Прописываем IP DNS-серверов в файл /etc/resolv.conf Он должен выглядеть следующим образом:
Файл: /etc/resolv.conf
nameserver 81.28.160.1
nameserver 81.28.160.111
Если сеть работоспособна, должны пинговаться шлюз и VPN-сервер. Проверяем:
[root@myhost sergo]# ping -c5 server.avtograd.ru
Код
PING 10.167.0.17 (10.167.0.17) 56(84) bytes of data
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=3.95 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=0.526 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=0.528 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=255 time=3.31 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=255 time=0.534 ms
Предварительная настройка роутинга
Примечание: Предварительная настройка роутинга необходима в том случае, когда VPN и/или DNS-сервера находятся в других подсетях. Если это не так (да вы счастливчик!) - смело пропускайте этот шаг.
Из таблицы маршрутизации мы видим, что в настоящий момент доступ ко всем хостам сети (включая DNS и VPN сервера) осуществляется по маршруту по умолчанию (default route). Это означает, что любой хост, расположенный за пределами нашего сегмента, машина будет искать, обращаясь к шлюзу, указанному в этом маршруте. Когда мы поднимаем VPN-соединение, VPN-сервер дает нам новый шлюз, через который доступны интернет-хосты. Мы должны удалить из маршрута старый шлюз и заменить его на новый. Проблема в том, что после удаления старого шлюза машина перестанет видеть VPN-сервер и разорвет VPN-соединение. Чтобы этого не произошло, наша машина всегда должна знать, где искать VPN и DNS сервера вне зависимости от наличия или отсутствия маршрута по умолчанию. Для этого мы пропишем статические маршруты на каждый VPN и DNS сервер. Также статические маршруты на VPN сервера избавят нас от возможной проблемы, когда удаленный IP адрес, выдаваемый нам VPN сервером, равен IP адресу самого сервера. Подробнее об этом здесь (http://pptpclient.sourceforge.net/howto-diagnosis.phtml#ip_loop пункт 4с.)
Для начала узнаем IP нашего VPN-сервера с помощью команды ping.
Консоль: [root@myhost sergo]# ping -c5 server.avtograd.ru
Код
PING server.avtograd.ru (192.168.0.1) 56(84) bytes of data.
Как видно из команды ping, IP VPN сервера 192.168.0.1
Добавляем в нашу таблицу роутинга статические маршруты на VPN и DNS сервера:
route add -host 81.28.160.1 gw 10.0.202.65
route add -host 81.28.160.111 gw 10.0.202.65
route add -host 192.168.0.1 gw 10.0.202.65
Удаляем маршрут по умолчанию
route del default
или
ip r d default
Проверка: мы должны успешно пинговать DNS и VPN сервера.
Консоль: [root@myhost sergo]# ping -c5 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=56 time=4.45 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=56 time=1.30 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=56 time=1.22 ms
Консоль: [root@myhost sergo]# ping -c5 81.28.160.1
PING 81.28.160.1 (81.28.160.1) 56(84) bytes of data.
64 bytes from 81.28.160.1: icmp_seq=1 ttl=56 time=0.982 ms
64 bytes from 81.28.160.1: icmp_seq=2 ttl=56 time=0.954 ms
64 bytes from 81.28.160.1: icmp_seq=3 ttl=56 time=1.02 ms
Настройка параметров VPN-соединения. Тестовый запуск
Все параметры нашего VPN соединения мы запишем в файле /etc/ppp/peers/aist. Создадим его и наполним следующим содержанием:
Файл: /etc/ppp/peers/aist
Код
pty "pptp 192.168.0.1 --nolaunchpppd"
user VPN_LOGIN
password "VPN_PASSWORD"
nodeflate
nobsdcomp
noauth
require-mppe-128
Параметры user и password в комментариях не нуждаются, значение остальных можно посмотреть в файле справки man pppd. Обратим внимание на то, что пароль забран в кавычки.
Убеждаемся, что в файлах /etc/ppp/options, ~/.ppprc, /etc/ppp/options.ppp0 нет незакомментированных параметров, которыми бы система могла затереть наши настройки. Если есть - комментируем
Загрузим модуль ядра командой(это нужно для поддержки шифрования)
modprobe ppp_mppe
Поднимаем VPN соединение
pppd call aist debug nodetach
Появятся логи соединения. Если все прошло успешно, они будут выглядеть примерно так:
Консоль: [root@myhost sergo]# pppd call corbina debug nodetach
using channel 2
Using interface ppp0
Connect: ppp0 <--> /dev/pts/0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <auth chap MD5> <magic 0x36da4966>]
sent [LCP ConfAck id=0x1 <auth chap MD5> <magic 0x36da4966>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x33368137> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x33368137]
rcvd [CHAP Challenge id=0x1 <f872f6df5542429b46d6cf7e89a3386c>, name = "bras8"]
sent [CHAP Response id=0x1 <ebb4965e871c49a07565b148dc2dbf29>, name = "unicorn2"]
rcvd [LCP EchoRep id=0x0 magic=0x36da4966]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
rcvd [IPCP ConfReq id=0x1 <addr 195.14.38.8>]
sent [IPCP ConfAck id=0x1 <addr 195.14.38.8>]
rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
sent [IPCP ConfReq id=0x2 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x2 <addr 89.178.77.182>]
sent [IPCP ConfReq id=0x3 <addr 89.178.77.182>]
rcvd [IPCP ConfAck id=0x3 <addr 89.178.77.182>]
Cannot determine ethernet address for proxy ARP
local IP address 89.178.77.182
remote IP address 195.14.38.8
Script /etc/ppp/ip-up started (pid 4072)
Script /etc/ppp/ip-up finished (pid 4072), status = 0x0
На соседнем терминале убедимся, что VPN-соединение установлено. Должен появиться сетевой интерфейс ppp0:
Консоль: [root@myhost sergo]# ifconfig
Код
eth0 Link encap:Ethernet HWaddr 00:1A:4D:4F:DA:0B
inet addr:10.0.202.79 Bcast:10.0.202.127 Mask:255.255.255.192
inet6 addr: fe80::21a:4dff:fe4f:da0b/64 Scope:Link
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:230416 errors:0 dropped:0 overruns:0 frame:0
TX packets:199075 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30732835 (29.3 MiB) TX bytes:31756887 (30.2 MiB)
Interrupt:16 Base address:0xe000
lo Link encap:Local 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:14076 errors:0 dropped:0 overruns:0 frame:0
TX packets:14076 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:579519 (565.9 KiB) TX bytes:579519 (565.9 KiB)
ppp0 Link encap:Point-to-Point Protocol
inet addr:89.178.77.182 P-t-P:195.14.38.8 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:40 (40.0 b) TX bytes:46 (46.0 b)
Запускаем снова. Все должно заработать.
Окончательная настройка роутинга
Итак, мы подняли VPN соединение, но в интернет выйти не можем - машина пока не знает, где искать интернет-хосты. Для этого мы должны добавить маршрут по умолчанию через интерфейс ppp0 в нашу таблицу маршрутизации (помните - старый маршрут по умолчанию мы удалили). В качестве шлюза по умолчанию теперь выступает remote IP address, который нам любезно предоставил VPN сервер - 195.14.38.8 (да-да, в нашем случае он совпадает с IP VPN сервера!). Этот remote IP address присутствует как в логах pppd (remote IP address 195.14.38.8), так и в параметрах интерфейса ppp0, которые выводятся на экран командой ifconfig (P-t-P:195.14.38.8). Вводим:
route add default gw 195.14.38.8
или
route add default dev ppp0
что в данном контексте - одно и то же Теперь попробуем пропинговать какой-нибудь интернет-хост
Консоль: [root@myhost sergo]# ping -c5
www.ya.ru PING ya.ru (213.180.204.8) 56(84) bytes of data.
64 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=61 time=2.11 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=61 time=2.23 ms
64 bytes from ya.ru (213.180.204.8): icmp_seq=3 ttl=61 time=2.39 ms
Работает!
Получено с
http://www.lfwiki.ru