суббота, 20 июня 2020 г.

Установка и настройка L2TP VPN-сервера на Ubuntu Server

Настраиваем VPN сервер посредством l2tp + ipsec.
Внутри контейнера в качестве ipsec демона будем использовать openswan, а в качестве l2tp сервера стандартный xl2tpd из репозиториев:
apt-get install xl2tpd
В репозиториях нет openswan, ставим из исходников.
Для начала придется установить дополнительные библиотеки, необходимые для сборки:
apt-get install libgmp3-dev gawk flex bison make
Далее, качаем с офф-сайта openswan:
wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xvzf openswan-latest.tar.gz
Собираем и устанавливаем (директория может быть более свежей версии):
cd openswan-2.6.51 
make programs
make install
Приступим к настройке ipsec демона.
Приведем конфиг /etc/ipsec.conf к виду:
config setup
   nat_traversal=yes
   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
   oe=off
   protostack=netkey

conn L2TP-PSK-NAT
   rightsubnet=vhost:%priv
   also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
   authby=secret
   pfs=no
   auto=add
   keyingtries=3
   rekey=no
   ikelifetime=8h
   keylife=1h
   type=transport
   left=SERVER.IP
   leftprotoport=17/1701
   right=%any
   rightprotoport=17/%any
Наиболее важные моменты конфига прокомментированы. Также следует не забыть составить конфиг именно таким образом, как указано выше, то есть с сохранением пробелов в начале строки у тех команд, у которых они указаны, так как отступ команды демоном привязывается к блоку, определяемому безотступным «conn».
Теперь зададим авторизацию для работы с ipsec. Существует два метода авторизации — по сертификату и по ключу ( PSK ). В данном примере мы настроим авторизацию по ключу в файле /etc/ipsec.secrets:
11.11.11.11 %any: PSK "mykey"
11.11.11.11 — это внешний IP адрес нашего сервера (или %any)
%any — это встроенная переменная обозначающая любой IP адрес
PSK — метод авторизации ( может быть RSA )
«mykey» — секретный ключ для авторизации, который потребуется передать клиенту.

Скрипт для настройки сети

В /root/ipsec
Добавляем содержимое:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
Делаем скрипт исполняемым
chmod +x /root/ipsec
Добавляем в rc.local и запускаем
sh /root/ipsec
Теперь пришло время настроить l2tp сервер. Он будет работать через протокол ppp.
Приводим конфиг /etc/xl2tpd/xl2tpd.conf к виду:
[global]
port = 1701
ipsec saref = yes
saref refinfo = 30

[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
name = vpnserver
Далее настраиваем конфиг ppp, который запрашивается нашим l2tp демоном ( /etc/ppp/options.xl2tpd ):
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
#debug
name vpnserver
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
В случае возникновения проблем со связью или с подключением для дебага работы l2tp просто раскомментируем «#debug» и смотрим в системный лог /var/log/syslog на наличие ошибок.
Настраиваем авторизацию в ppp ( /etc/ppp/chap-secrets ):
user vpnserver password *
Рестартуем все сервисы
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
Проверяем работу
ipsec verify
Checking if IPsec got installed and started correctly:

Version check and ipsec on-path                         [OK]
Openswan U2.6.50/K4.9.0-3-amd64 (netkey)
See `ipsec --copyright' for copyright information.
Checking for IPsec support in kernel                    [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                    [OK]
         ICMP default/accept_redirects                  [OK]
         XFRM larval drop                               [OK]
Hardware random device check                            [N/A]
Two or more interfaces found, checking IP forwarding    [OK]
Checking rp_filter                                      [OK]
Checking that pluto is running                          [OK]
 Pluto listening for IKE on udp 500                     [OK]
 Pluto listening for IKE on tcp 500                     [NOT IMPLEMENTED]
 Pluto listening for IKE/NAT-T on udp 4500              [OK]
 Pluto listening for IKE/NAT-T on tcp 4500              [NOT IMPLEMENTED]
 Pluto listening for IKE on tcp 10000 (cisco)           [NOT IMPLEMENTED]
Checking NAT and MASQUERADEing                          [TEST INCOMPLETE]
Checking 'ip' command                                   [OK]
Checking 'iptables' command                             [OK]

воскресенье, 26 апреля 2020 г.

Application Default Credentials (ADC)

Установка ADC позволяет приложениям, работающим с GCP ресурсами и использующим Google API библиотеки, управлять ресурсами GCP через авторизованные API вызовы, используя credentials вашего пользователя. 

Создайте  АDC: $ gcloud auth application-default login

В конце всех действий вы должны получить:
Credentials saved to file: [/home/user/.config/gcloud/application_default_credentials.json]

среда, 22 апреля 2020 г.

Создание образа диска с помощью Packer на примере Google Cloud.

Создаем файл с расширением .json.

Например, ubuntu16.json:

{
    "builders": [ #основные параметры
        {
            "type": "googlecompute",
            "project_id": "infra-5314134",
            "image_name": "reddit-base-{{timestamp}}",
            "image_family": "reddit-base",
            "source_image_family": "ubuntu-1604-lts",
            "zone": "europe-west1-b",
            "ssh_username": "pawwwel",
            "machine_type": "f1-micro"
        }
    ],
    "provisioners": [ #запуск дополнительных скриптов
        {
            "type": "shell",
            "script": "scripts/install_ruby.sh",
            "execute_command": "echo '1' | sudo -S {{.Path}}"
        },
        {
            "type": "shell",
            "script": "scripts/install_mongodb.sh",
            "execute_command": "echo '1' | sudo -S {{.Path}}"
        }
    ]
}

Можно проверить правильность синтаксиса командой:

 packer validate ubuntu16.json

Запустить:

 packer build ubuntu16.json


Если хотим добавить изменяемые параметры:

1. нужно изменить файл

{
    "variables": { #добавить параметры
"project_id": null,
"zone": "europe-wes1-b",
"machine_type": "f1-micro",
"source_image": "null"
},

    "builders": [
        {
            "type": "googlecompute",
            "project_id": "{{ user `project_id` }}",
            "image_name": "reddit-base-{{timestamp}}",
            "image_family": "reddit-base",
            "source_image_family": "{{ user `source_image` }}",
            "zone": "{{ user `zone` }}",
            "ssh_username": "pawwwel",
            "machine_type": "{{ user `machine_type` }}"
        }
    ],
    "provisioners": [
        {
            "type": "shell",
            "script": "scripts/install_ruby.sh",
            "execute_command": "echo '1' | sudo -S {{.Path}}"
        },
        {
            "type": "shell",
            "script": "scripts/install_mongodb.sh",
            "execute_command": "echo '1' | sudo -S {{.Path}}"
        }
    ]
}

2. файл параметров

var.json


"project_id": "infra-5314134",
"source_image": "ubuntu-1604-lts"
}

3. запустить команду на выполнение:

packer build -var-file var.json ubuntu16json

Запустить из консоли создание виртуальной машины:

gcloud compute instances create vm001 --zone=europe-west1-b --machine-type=f1-micro --image=reddit-base-1587491511

суббота, 18 апреля 2020 г.

Install and configure Pritunl

Создаем VPN-сервер Pritunl на базе Linux.

На сайте указана следующая последовательность команд для Ubuntu:

sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list << EOF deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse EOF sudo tee /etc/apt/sources.list.d/pritunl.list << EOF deb http://repo.pritunl.com/stable/apt bionic main EOF sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv E162F504A20CDF15827F718D4B7C549A058F8B6B sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A sudo apt-get update sudo apt-get --assume-yes install pritunl mongodb-server sudo systemctl start pritunl mongodb sudo systemctl enable pritunl mongodb

Но возникает ошибка
gpg: keyserver receive failed: Server indicated a failure
после ввода команды 
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv E162F504A20CDF15827F718D4B7C549A058F8B6B sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A


Решается следующим образом:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E162F504A20CDF15827F718D4B7C549A058F8B6B sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A

среда, 8 апреля 2020 г.

Linux netplan

Все конфигурационные файлы Netplan находятся в папке /etc/netplan/. Внутри папки находятся файлы с расширением  yaml.

Редактирование файлов:
1. все интерфейсы можно прописывать в одном файле.
2. нельзя использовать табуляцию, а только пробелы
3. параметры прописывать строго по иерархии

Пример:

network:
  version: 2
  renderer: networkd
  ethernets:
   enp3s0:
    dhcp4: yes
   enp8s0:
    dhcp4: no
    addresses: [ 192.168.1.10/24 ]
    gateway4: 192.168.1.1
    nameservers:
    addresses: [ 8.8.8.8, 8.8.4.4 ]