Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

HOWTO: VPN
Пред.След.

Процедура

Планирование

Перед тем, как вы начнете настраивать свою систему, вы должны уточнить детали, касающиеся сети. Я предполагаю, что у вас имеются две интрасети, каждая из которых защищена от внешней сети своим firewall. Соответственно, у вас имеются, как минимум, два сетевых интерфейса на каждом firewall. Возьмите листок бумаги и карандаш, и запишите их IP-адреса и маски. Вам потребуется также еще один IP-адрес на каждый firewall из сетевого пространства, создаваемого вами в VPN. Эти адреса не должны входить в пространство ни одной из существующих сетей. Я предлагаю вам использовать "частные" адреса. Вот их список:

  • 10.0.0.0 - 10.255.255.255

  • 172.16.0.0 - 172.31.255.255

  • 192.168.0.0 - 192.168.255.255

Например, у вас может быть такая конфигурация: Две крепости firewall называются fellini и polanski. На каждом из них имеется интернет-интерфейс (-out), интранет-интерфейс (-in), и vpn-интерфейс (-vpn). Адреса и маски:

  • fellini-out: 193.6.34.12 255.255.255.0

  • fellini-in: 193.6.35.12 255.255.255.0

  • fellini-vpn: 192.168.0.1 point-to-point

  • polanski-out: 193.6.36.12 255.255.255.0

  • polanski-in: 193.6.37.12 255.255.255.0

  • polanski-vpn: 192.168.0.2 point-to-point

Итак, план у нас есть.

Что вам понадобится

Вам понадобится

  • Linux firewall

  • ядро

  • самая минимальная конфигурация

  • ipfwadm

  • fwtk

  • Утилиты VPN

  • ssh

  • pppd

  • sudo

  • pty-redir

Текущие версии:

  • ядро: 2.0.29 Используйте стабильное ядро, оно должно быть новее 2.0.20, в более ранних была ошибка ping'o'death. В настоящий момент существует ядро 2.0.30, но в нем есть пара ошибок. Если вы хотите, чтобы у вас работал новый более быстрый код работы с сетью, используйте препатч. 3-ий работает прекрасно.

  • базовая система: Я предпочитаю Debian. Но, каждому свое. Вы совсем не хотите использовать большие пакеты, и конечно никогда не думали о sendmail. Вам абсолютно не нужен telnet, ftp, и 'r'-команды (это необходимо только другим unix-ам).

  • ipfwadm: У меня версия 2.3.0

  • fwtk: У меня версия 1.3

  • ssh: 1.2.20 или новее. С более ранними версиями были проблемы с суб-протоколом.

  • pppd: Я использовал 2.2.0f для испытания, но я не уверен в его безопасности, поэтому я убрал у него флаг seteuid, и использовал для его запуска sudo.

  • sudo: 1.5.2 - самая новая из известных мне версий

  • pty-redir: Написан мной. Возьмите его по адресу ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz. Номер версии - 0.1. Если с ним возникли проблемы - пишите мне.

Сборка и установка

Соберите или установите уже собранные утилиты. Прочитайте документацию к каждой из них. Прочитайте "Howto: Firewall". Теперь у нас есть утилиты.

Настройка других подсистем

Настройте необходимые вам правила firewall, и т.п.. Вам надо будет разрешить трафик ssh между двумя машинами. Это означает, что вам надо разрешить вызывающей машине соединение с портом 22 на отвечающей. Запустите sshd на отвечающей машине, и проверьте, можете ли вы соединиться с ней с вызывающей. Этот шаг я не проверял - если возникнут проблемы, пишите.

Заводим псевдо-пользователя для VPN

Создайте на отвечающей машине псевдо-пользователя для VPN, используя свою любимую утилиту (vi, mkdir, chown, chmod). Вы можете создать его и на вызывающей машине, но, я думаю, вы будете устанавливать соединение при загрузке системы, поэтому хватит и root-а. Кто-нибудь сможет указать мне на проблемы с использованием root на вызывающей машине?

Создаем ключ ssh для вызывающей стороны

Используйте программу ssh-keygen. Установите пустой пароль, если вы хотите автоматически устанавливать соединение с VPN.

Настраиваем автоматическую авторизацию на отвечающей стороне

Скопируйте только что созданный ключ на отвечающую машину в каталог .ssh/authorized_keys и установите следующие разрешения:

drwx------ 2 slave slave 1024 Apr 7 23:49 ./  
drwx------ 4 slave slave 1024 Apr 24 14:05 ../  
-rwx------ 1 slave slave 328 Apr 7 03:04 authorized_keys  
-rw------- 1 slave slave 660 Apr 14 15:23 known_hosts  
-rw------- 1 slave slave 512 Apr 21 10:03 random_seed  

Первая строка - это каталог ~slave/.ssh, вторая - ~slave.

Усиляем меры безопасности ssh на обеих сторонах.

Усилить - значит указать в sshd_conf следующее:

PermitRootLogin no  
IgnoreRhosts yes  
StrictModes yes  
QuietMode no  
FascistLogging yes  
KeepAlive yes  
RhostsAuthentication no  
RhostsRSAAuthentication no  
RSAAuthentication yes  
PasswordAuthentication no  
PermitEmptyPasswords no 

Парольная авторизация выключена, поэтому вход возможен только при использовании авторизованных ключей. (Вы, конечно, выключили telnet и 'r'-команды).

Разрешаем запуск ppp и route для обеих сторон.

В моем случае на вызывающей стороне работает root - ничего делать не надо. На отвечающей добавьте следующие строки в файл /etc/sudoers:

Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/route  
slave ALL=NOPASSWD: VPN  

Как вы видите, я использую скрипты для запуска ppp и настройки таблицы маршрутов на отвечающей машине.

Пишем скрипты

На вызывающей стороне я написал настоящий init-скрипт:


#! /bin/sh


PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:
PPPAPP=/home/slave/ppp
ROUTEAPP=/home/slave/route
PPPD=/usr/sbin/pppd
NAME=VPN
REDIR=/usr/local/bin/pty-redir
SSH=/usr/bin/ssh
MYPPPIP=192.168.0.1
TARGETIP=192.168.0.2
TARGETNET=193.6.37.0
MYNET=193.6.35.0
SLAVEWALL=polanski-out
SLAVEACC=slave

test -f $PPPD || exit 0

set -e

case "$1" in
  start)
	echo setting up vpn
	echo Установка связи с VPN
        $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP >/tmp/device
	TTYNAME=`cat /tmp/device`
echo tty is $TTYNAME
	sleep 10s
	if [ ! -z $TTYNAME ]
	then
	$PPPD $TTYNAME ${MYPPPIP}:${TARGETIP}
	else
		echo ОШИБКА!
		logger "Соединение VPN установить не удалось"
	fi
	sleep 5s
	route add -net $TARGETNET gw $TARGETIP
	$SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP
    ;;
  stop)
	ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}' | xargs kill
    ;;
  *)
    # echo "Usage: /etc/init.d/$NAME {start|stop|reload}"
    echo "Usage: /etc/init.d/$NAME {start|stop}"
    echo "Использование: /etc/init.d/$NAME {start|stop}"
    exit 1
    ;;
esac

exit 0

На отвечающей потребовался только скрипт, добаляющий строку в таблицу маршрутизации (/usr/local/vpn/route):

#!/bin/bash  
/sbin/route add -net 193.6.35.0 gw 192.168.0.1  

а в файл .ppprc я записал следующее:

passive  


Пред.НачалоСлед.
Введение Что же на самом деле происходит?
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...