Пример настройки vpn-подключения в Linux | Версия для печати |
ключевые слова для поиска: vpn, клиент, подключение, Linux, Fedora Core 6, провайдер, Corbina # Secrets for authentication using CHAP # client server secret IP addresses # profile: corbina your_login_name corbina your_password * Файл /etc/ppp/peers/kvpnc.corbina: # # profile: corbina # (for vpn connection) # # domain and username, used to select lines in secrets files name your_login_name # name of tunnel, used to select lines in secrets files remotename corbina # name of tunnel, passed to ip-up scripts ipparam kvpnc.corbina # send logs to stderr (fd = 2) logfd 2 # name of tunnel, used to name /var/run pid file linkname kvpnc.corbina # pppd will detach from terminal when successful connection is established updetach # add default route on success and remove on disconnect defaultroute # # no additional file with options - they are all here... # # lock the device lock # we do not require the peer to authenticate itself noauth # refuse to authenticate itself to the peer using EAP, CHAP, MSCHAP # we only accept MSCHAP-V2 refuse-eap refuse-chap refuse-mschap # Dont use BSD compression nobsdcomp # Dont use deflate method nodeflate # use MPPE encryption # require the use of MPPE, with 128-bit encryption #require-mppe-128 #mppe required,stateless # use MPPE encryption #require-mppe #nomppe-stateful # require the use of MPPE, with 128-bit encryption #require-mppe-128 # userdefined MTU mtu 1500 # userdefined MRU mru 1000 Обратите внимание на наличие defaultroute. это важно. Если у вас выделенная линия (что скорее всего) и скорость достаточно высокая, то сжатие лучше выключить (опция nobsdcomp). Далее добавляем системную службу (service) - создаём файл /etc/rc.d/init.d/vpn: #!/bin/sh # # vpn Start vpn service # # chkconfig: 345 98 01 # description: vpn - start/stop vpn tunnel via pptp protocol \ # for connection to ISP provider # # Source function library. . /etc/rc.d/init.d/functions # Get network config . /etc/sysconfig/network # Settings PROTOCOL_PPTP=/usr/sbin/pptp FILE_LOCK=/var/lock/subsys/vpn FILE_LOG=/var/log/vpn.log FILE_PPPD_OPTIONS=kvpnc.corbina RETVAL=0; PROG="vpn" if [ ! -e /usr/sbin/pptp ]; then echo "$PROG: global error - file needed for vpn service not found"; exit 1; fi start(){ echo -n "Starting $PROG: "; if [ -e $FILE_LOCK ]; then if [ -e /var/run/ppp0.pid ] && [ -e /proc/`cat /var/run/ppp0.pid` ]; then failure $"cannot start vpn: vpn is already running" echo; return 1; fi fi # checking on ethX presence (which must be active) if ! ifconfig | grep 'eth[0-9]' &> /dev/null then failure $"$PROG: error - ethX interface needed for vpn service not found"; echo; return 2; fi # force add default route, net routes and hosts routes /etc/rc.d/rc.routes >/dev/null 2>&1 # checking on pppX presence if ifconfig -a | grep 'ppp[0-9]' &> /dev/null then failure $"$PROG: error - pppX interface already exist, firstly shutdown it"; echo; return 3; fi #Connect to ISP route del default dev eth0 vpn_list=`host vpn.corbina.ru | sort -r | awk '{print $NF}'`; for vpn in $vpn_list; do /usr/sbin/pppd pty "pptp $vpn --nolaunchpppd --loglevel 0 --nobuffer" call $FILE_PPPD_OPTIONS logfile $FILE_LOG; sleep 1; if [ -f /var/run/ppp0.pid ]; then RETVAL=0; break; else RETVAL=4; fi done # echo; if [ $RETVAL -eq 0 ]; then touch $FILE_LOCK; success $"vpn started"; else failure $"vpn cannot be started"; fi echo; return $RETVAL; } stop(){ echo -n $"Shutting down $PROG: " # checking on ethX presence if ifconfig -a | grep 'eth[0-9]' &> /dev/null then # force add default route, net routes and hosts routes /etc/rc.d/rc.routes >/dev/null 2>&1 fi if [ ! -e $FILE_LOCK ]; then failure $"cannot stop vpn: vpn is not running" echo; return 1; fi killproc pppd RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $FILE_LOCK; return $RETVAL } # See how we were called. case "$1" in start) start; ;; stop) stop; ;; status) status -p /var/run/ppp0.pid $PROG; RETVAL=$?; ;; restart|reload) $0 stop; $0 start; RETVAL=$? ;; *) echo "Usage: $PROG {start|stop|status|restart}" exit 0 esac exit $RETVAL Обратите внимание на опцию, с которой запускается pppd ("--nobuffer"), её следует использовать в тех же случаях что и nobsdcomp (т.е. на средне- и высокоскоростных линиях). Скрипт /etc/rc.d/rc.routes устанавливает маршруты к ресурсам провайдера - для каждого провайдера это индивидуально и в общем случае эта установка может отсутствовать, в этом случае просто закомментируйте строку /etc/rc.d/rc.routes >/dev/null 2>&1в файле /etc/rc.d/init.d/vpn, поставив в начале строки знак "#". У провайдера Corbina это делается для того, чтобы сетевой трафик, идущий к ресурсам провайдера, проходил через локальную сеть, а не через Internet - это позволяет сэкономить денежные средств в случае, когда оплата идёт в зависимости от объёма переданных данных в Internet и при этом скорость передачи как правило значительно выше. Если вы не знаете, нужна ли вам установка дополнительных маршрутов, то вы можете для начала закомментировать или убрать строку, отвечающую за их установку - доступ к Internet должен появиться и без них. Далее вы можете узнать в службе технической поддержки или на сайте провайдера о необходимости задания дополнительных маршрутов для доступа к ресурсам вашего провайдера. Файл /etc/rc.d/rc.routes для провайдера Corbina на 03.12.2007 выглядит так: #!/bin/sh # # Corbina network resources # # gateway route add default gw 10.197.72.1 # windows - net route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.197.72.1 route add -net 85.21.79.0 netmask 255.255.255.0 gw 10.197.72.1 route add -net 85.21.90.0 netmask 255.255.255.0 gw 10.197.72.1 route add -net 83.102.146.96 netmask 255.255.255.224 gw 10.197.72.1 # windows - host route add -net 85.21.52.254 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.88.130 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.138.208 netmask 255.255.255.240 gw 10.197.72.1 route add -net 89.179.135.67 netmask 255.255.255.255 gw 10.197.72.1 route add -net 195.14.50.16 netmask 255.255.255.255 gw 10.197.72.1 route add -net 195.14.50.26 netmask 255.255.255.255 gw 10.197.72.1 route add -net 195.14.50.93 netmask 255.255.255.255 gw 10.197.72.1 # unknown net route add -net 83.102.231.32 netmask 255.255.255.240 gw 10.197.72.1 route add -net 85.21.108.16 netmask 255.255.255.240 gw 10.197.72.1 # unknown host route add -net 83.102.255.131 netmask 255.255.255.255 gw 10.197.72.1 route add -net 83.102.255.130 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.29.242 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.138.210 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.138.214 netmask 255.255.255.255 gw 10.197.72.1 # other hosts route add -net 62.205.179.146 netmask 255.255.255.255 gw 10.197.72.1 route add -net 83.102.146.102 netmask 255.255.255.255 gw 10.197.72.1 route add -net 83.102.232.1 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.52.94 netmask 255.255.255.255 gw 10.197.72.1 route add -net 85.21.90.25 netmask 255.255.255.255 gw 10.197.72.1 route add -net 213.234.192.7 netmask 255.255.255.255 gw 10.197.72.1 for vpn in `host vpn.corbina.net | sort -r | awk '{ print $NF }'`; do route add -host $vpn gw 10.197.72.1; done Обратите внимание на то, что 10.197.72.1 является адресом маршрутизатора по умолчанию (default gateway), у другого провайдера он будет другим. Отмечу, что маршруты берутся из: 1) официальных источников (например, у провайдера на сайте или форумах); 2) из других ОС (например в Windows XP их можно увидеть командой "route PRINT"); 3) на основании здравого смысла и опытным путём: если вдруг какой-то ресурс становится недоступным, то очень возможно, что провайдер что-то изменил в сети. В этом случае попробуйте определить ip-адрес: nslookup Если IP-адрес определяется, то просто добавьте его в /etc/rc.d/rc.routes, если нет, то теребите провайдера... Фантомные адреса и маршруты удалять, imho, не следует - пусть будут на всякий случай. Регистрируем службу vpn-клиента в системе такой командой (в консоли от рута): chkconfig --add vpn Теперь службу можно запустить следующей командой (в консоли): service vpn start Можно также сделать что он будет запускаться автоматически (man chkconfig). Если у ваша система получает IP-адрес динамически (что скорее всего), посредством dhcp, то можно создать создать файл /etc/dhclient.conf для автоматического получения максимума возможной информации от dhcp-сервера. Для этого потребуется создать/изменить файл /etc/dhclient.conf чтобы он выглядел примерно так: request subnet-mask, broadcast-address, static-routes, routers, domain-name-servers, \ extensions-path, resource-location-servers, router-discovery, router-solicitation-address, \ www-server, interface-mtu; 3. Список использованных источников. 1) man pppd 2) man pptp 3) man chkconfig 4) man dhclient.conf 4. Автор. Mr.Nobody, с мной можно связаться можно через Личную порту Linux Портала (это требует регистрации). Опубликовал: Mr.Nobody |