7 мар. 2013 г.

Установка PPTP VPN сервера на Ubuntu

Данный материал протестированн для ubuntu 10.10 и ubuntu 12.4 .

Возникла необходимость присоединения клиентов из интернет к нашей локальной сети через VPN (virtual private network) подключение. В сети обнаружилось довольно простое решение на базе ubuntu и pptpd, настрока и установка которого не заняла много времени.

Установка PPTP сервера сводится к установке пакета

#sudo apt-get install pptpd
 
После установки необходимо отредактировать конфигурационный файл:

#sudo nano /etc/pptpd.conf

Внести в него изменения раскоментировав строки:

localip 192.168.0.1
remoteip 192.168.0.100-200

Данные строчки назначат адрес сетевого интерфейса сервера: 192.168.0.1 а подключившимся клиентам ip дареса из диапазона от 100 до 200

Необходимо также отредактировать файл с опциями и прописать адреса dns серверов которые назначаются подключившимся клиентам в нашем случае указываем dns от google с адресами 8.8.8.8:

#sudo nano /etc/ppp/pptpd-options

 И вносим изменения раскоментировав строки

ms-dns 8.8.8.8
ms-dns 8.8.4.4

 Так же необходимо отредактировать файл где хранятся имена, пароли и ip адреса назначаемые клиентам:

#sudo nano /etc/ppp/chap-secrets 

Внесем изменения в файл отредактировав его таким образом

# client        server  secret                  IP addresses
username        *       myPassword              "192.168.0.200" 

После настройки можно перезапустить сервер PPTPD :

#/etc/init.d/pptpd restart

Серевер запустился и работает, необходимо настроить форвардинг IP (перенаправление)
. Редактируем еще один файл :

#sudo nano /etc/sysctl.conf

Находим строчку  net.ipv4.ip_forward и устанавливаем значение  1:

net.ipv4.ip_forward=1 

 Перечитаем системные изменения настроек в конфигурационном файле:

#sudo sysctl -p

 Для того что бы дать возможность подключенным клиентам видеть внутреннюю локальную сеть необходимо настроить NAT с помощью межсетевого экрана iptables .

Выполним две команды:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356

После всех выполненных действий можно проверить ходят ли пакеты в локальную сеть а также в интернет (при условии что сетевой интерфейс eth0 сконфигурирован стандартно и настроен на работу через шлюз и находится в подсети 192.168.0.0/24 ).

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

В системе Redhat есть удобная команда : service iptables save
после которой файл с настройками сохраняется и при перезагрузке системы сам считывает сохраненные правила и загружает их в таблицу - очень удобно.

Шаг 1: Создадим файл

#sudo touch /etc/init.d/iptables

Шаг 2: Редактируем файл

#sudo nano /etc/init.d/iptables

 Шаг 3: Вставить этот кусок кода в файл

--------------------------------------------

 #! /bin/sh

### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:  
# Required-Stop:   
# Should-Start:    
# Default-Start:     3 4 5
# Default-Stop:      0 1 6
# Short-Description: Linux firewall initialisation and save
# Description:       this script is for configuring linux firewall (netfilter)
#                    with help of command-line utility called iptables
### END INIT INFO

#set -e

DAEMON=/sbin/iptables
ipt=$DAEMON

test -x $DAEMON || exit 0

if [ ! -d /etc/iptables ]; then
        mkdir /etc/iptables
fi

if [ ! -f /etc/iptables/rules.save ]; then
        /sbin/iptables-save -c > /etc/iptables/rules.save
fi

. /lib/lsb/init-functions

case "$1" in
  start)
        log_daemon_msg "Starting linux firewall" "iptables"
        cat /etc/iptables/rules.save | iptables-restore -c
        log_end_msg $?
        ;;
  stop)
        log_daemon_msg "Stopping linux firewall" "iptables"
        /sbin/iptables-save > /etc/iptables/rules.save
        for table in filter nat mangle
        do
        $ipt -t $table -F
        $ipt -t $table -X
        $ipt -t $table -Z
        done

        $ipt -P FORWARD ACCEPT
        $ipt -P INPUT ACCEPT
        $ipt -P OUTPUT ACCEPT

        log_end_msg 0
        ;;

  restart)
#Restart is disabling all active rules and loads firewall rules from previously saved file
            log_daemon_msg "Restarting firewall..." "iptables"
            log_daemon_msg "Dropping rules" "iptables"

#Dropping current rules
        for table in filter nat mangle
        do
        $ipt -t $table -F
        $ipt -t $table -X
        $ipt -t $table -Z
        done

        $ipt -P FORWARD ACCEPT
        $ipt -P INPUT ACCEPT
        $ipt -P OUTPUT ACCEPT

        log_daemon_msg "Reloading previously saved rules" "iptables"
        cat /etc/iptables/rules.save | iptables-restore -c

        log_end_msg 0
        ;;

  status)
        log_daemon_msg "Not implemented" "iptables"
        log_end_msg 0
        ;;
  save)
        log_daemon_msg "Saving firewall rules"
        /sbin/iptables-save > /etc/iptables/rules.save
        log_end_msg 0
        ;;
  *)
        echo "Usage: /etc/init.d/iptables {start|stop|restart|save}"
        exit 1
esac

exit 0

-------------------------------------

 Шаг 4:  После сохранения файла сделать его исполняемым и назначить фладельца root


#chown root:root /etc/init.d/iptables
#chmod u+x /etc/init.d/iptables

Шаг 5: Добавим скрипт в автозагрузку:

#update-rc.d iptables defaults
  
 После всех выполненных действий можно писать правила и сохранять их командой

#/etc/init.d/iptables save

При запуске системы правила автоматически стартуют

#/etc/init.d/iptables start

Скрипт считывает их из этого файла:

#/etc/iptables/rules.save


Если имеются замечания и недочеты, пишите в коментариях а я подправлю.

Комментариев нет:

Отправить комментарий