Купил себе используя мой промо-код «CloudLITE4116
» виртуальную машину и хочу сделать ее частью OpenVPN
сети
, дабы через нее настроить доступ к домашнему почтовому серверу. В качестве операционной системы выбрал Ubuntu 18.04 Server
, в дополнении получил белый статический WAN-IP
. Это большой плюс в наше время, я за него не плачу все в ходит в стоимость.
Шаг №1:
Подключаюсь по ssh
к ней сперва сгенерированным паролем при заказе, а после изменяю на свой собственный:
ekzorchik@navy:~$ ssh -l root mail.ekzorchik.com root@ubuntu18:~# passwd root Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@ubuntu18:~#
Шаг №2:
Изменяю порт на SSH
подключение и доступ если я в группе:
root@ubuntu18:~# groupadd sshauth root@ubuntu18:~# usermod -aG sshauth root root@ubuntu18:~# nano /etc/ssh/sshd_config Port 22300 AllowGroups sshauth root@ubuntu18:~# service ssh restart
Шаг №3:
Произвожу первоначальную установку системы:
nano default #!/bin/bash # Codepage UTF-8 # aka Олло Александр aka ekzorchik (Telegram: @ekzorchik) # for Ubuntu 18.04 Server amd64 #for wget no use proxy sed -i 's/#use_proxy = on/use_proxy = off/g' /etc/wgetrc rm -Rf /var/lib/apt/lists locklist="/var/lib/apt/lists/lock" if [ -f $locklist ] then echo "$locklist found i budet delete" rm -rf $locklist else echo "$locklist not found" fi lockapt="/var/cache/apt/archives/lock" if [ -f $lockapt ] then echo "$lockapt found i budet delete" rm -rf $lockapt else echo "$lockapt not found" fi lock="/var/lib/dpkg/lock" lockfrontend="/var/lib/dpkg/lock-frontend" lockbackup="/var/lib/dpkg/lock-backup" if [ -f "$lock" ] then echo "$lock found i budet delete" rm -rf $lock ls /var/lib/dpkg/lock else echo "$lock not found." fi if [ -f "$lockfrontend" ] then echo "$lockfrontend found i budet delete" rm -rf $lockfrontend ls /var/lib/dpkg/lock-frontend else echo "$lockfrontend not found" fi if [ -f "$lockbackup" ] then echo "$lockbackup found i budet delete" rm -rf $lockbackup ls /var/lib/dpkg/lock-backup else echo "$lockbackup not found" fi apt-get update && sudo apt-get upgrade -y rm -rf /var/lib/dpkg/updates/* sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades dpkg --configure -a #Timezone rm -f /etc/localtime ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime apt-get autoremove -y # Удаляю из системы пакет Cloud Init sudo bash -c "echo 'datasource_list: [ None ]' sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg" sudo apt purge -y cloud-init sudo rm -Rf /etc/cloud /var/lib/cloud #NTP sudo apt-get install ntpdate mercurial bikeshed -y sudo bash -c "echo '@reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null'" | sudo -s tee /var/spool/cron/crontabs/root ntpdate -s 0.pool.ntp.org #Install nuznoe in work apt-get install htop mc software-properties-common -y purge-old-kernels --keep 1 -y sudo locale-gen en_US.UTF-8 sudo sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen && sudo locale-gen echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale root@ubuntu18:~# chmod +x default root@ubuntu18:~# ./default root@mail:~# nano /etc/hosts 95.181.198.14 mail.ekzorchik.com autodiscovery.ekzorchik.com root@mail:~# nano /etc/hostname mail.ekzorchik.com root@mail:~# nano /etc/netplan/99-netcfg-vmware.yaml network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no dhcp6: no addresses: - 95.181.198.14/24 gateway4: 95.181.198.1 nameservers: addresses: - 95.131.31.206 - 178.20.234.206 root@mail:~# nano /etc/sysctl.conf net.ipv4.ip_forward=1 root@mail:~# sysctl -p net.ipv4.ip_forward = 1 root@mail:~#
Шаг №4:
Удаляю дефолтную сеть видимо использовавшуюсь при подготовке образа инженерами Dataline:
root@mail:~# rm /etc/network/interfaces root@mail:~# netplan apply
Шаг №5:
Устанавливаю в систему надстройку над правилами iptables
которую я использую — это firewalld:
ufw disable apt-get install -y firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --state firewall-cmd --set-default-zone=public firewall-cmd --zone=public --add-port=22400/tcp --permanent firewall-cmd --zone=public --remove-service=ssh --permanent firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent firewall-cmd --reload firewall-cmd --zone=public --list-all systemctl restart firewalld.service
Шаг №6:
на OpenVPN
сервере создаю сертификат для клиента:
root@ekzorchik:~# cd /etc/openvpn/easy-rsa/ root@ekzorchik:/etc/openvpn/easy-rsa# . ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys root@ekzorchik:/etc/openvpn/easy-rsa# ./build-key mailekzorchikcom Can't load /root/.rnd into RNG 139785882440128:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Generating a RSA private key ...............................................................................+++++ ....................................................+++++ writing new private key to 'mailekzorchikcom.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [RU]: Locality Name (eg, city) [MOSCOW]: Organization Name (eg, company) [RUSSIAN]: Organizational Unit Name (eg, section) [ekzorchik]: Common Name (eg, your name or your server's hostname) [mailekzorchikcom]:mail.ekzorchik.com Name [EasyRSA]: Email Address [support@ekzorchik.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Can't load /root/.rnd into RNG 140594945466816:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'RU' localityName :PRINTABLE:'MOSCOW' organizationName :PRINTABLE:'RUSSIAN' organizationalUnitName:PRINTABLE:'ekzorchik' commonName :PRINTABLE:'mail.ekzorchik.com' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'support@ekzorchik.ru' Certificate is to be certified until Oct 18 19:13:32 2031 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated root@ekzorchik:/etc/openvpn/easy-rsa# ls keys/mail* keys/mailekzorchikcom.crt keys/mailekzorchikcom.csr keys/mailekzorchikcom.key root@ekzorchik:/etc/openvpn/easy-rsa# root@ekzorchik:/etc/openvpn/easy-rsa/keys# scp -P 22300 mail* root@mail.ekzorchik.com:/root/ root@vpn.ekzorchik.ru's password: mailekzorchikcom.crt 100% 5554 10.3MB/s 00:00 mailekzorchikcom.csr 100% 1090 2.8MB/s 00:00 mailekzorchikcom.key 100% 1704 4.9MB/s 00:00 root@ekzorchik:/etc/openvpn/easy-rsa/keys# root@ekzorchik:/etc/openvpn/easy-rsa/keys# scp -P 22400 ca.crt root@mail.ekzorchik.com:/root/ root@ekzorchik:~# cp /etc/openvpn/ccd/mikrotik /etc/openvpn/ccd/mailekzorchikcom root@ekzorchik:~# nano /etc/openvpn/ccd/mailekzorchikcom push "route 172.35.35.0 255.255.255.0" push "route 172.33.33.0 255.255.255.0" root@ekzorchik:~# systemctl restart openvpn
Шаг №7:
На VPS on mail.ekzorchik.com
устанавливаю OpenVPN
клиент:
root@mail:~# apt-get install -y openvpn root@mail:~# mkdir /etc/openvpn/keys root@mail:~# mv ca.crt mailekzorchikcom.crt mailekzorchikcom.key /etc/openvpn/keys/ root@mail:~# chown -R root:root /etc/openvpn/keys/ root@mail:~# chmod -R 600 /etc/openvpn/keys/ root@mail:~# nano /etc/openvpn/client.conf client dev tun0 proto tcp remote vpn.ekzorchik.ru 1194 resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/mailekzorchikcom.crt key /etc/openvpn/keys/mailekzorchikcom.key cipher AES-128-CBC auth SHA1 verb 4 mute 20 status /var/log/openvpn-status.log log /var/log/openvpn.log root@mail:~# touch /var/log/openvpn.log root@mail:~# nano /etc/default/openvpn AUTOSTART="client"
На заметку: сервис при запуске ищет клиентский конфигурационный файл в каталоге /etc/openvpn/client.conf
root@mail:~# systemctl status openvpn@client ● openvpn@client.service - OpenVPN connection to client Loaded: loaded (/lib/systemd/system/openvpn@.service; indirect; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Wed 2021-10-20 23:20:42 MSK; 4s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 2028 ExecStart=/usr/sbin/openvpn --daemon ovpn-client --status /run/openvpn/client.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/client.conf --writepid /run/openvpn/client Main PID: 2028 (code=exited, status=1/FAILURE)
Шаг №8:
Чтобы одновременно работал openvpn
клиент и ssh
подключение:
root@mail:~# nano /etc/rc.local #!/bin/bash ip rule add from $(ip route get 1 | grep -Po '(?<=src )(\S+)') table 128 ip route add table 128 to $(ip route get 1 | grep -Po '(?<=src )(\S+)')/32 dev $(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)') ip route add table 128 default via $(ip -4 route ls | grep default | grep -Po '(?<=via )(\S+)') exit 0 root@mail:~# root@mail:~# systemctl enable openvpn root@mail:~# reboot
На заметку: Если этого не сделать я потеряю доступ к mail.ekzorchik.com
и придется через личный кабинет подключаться к консоли виртуальной машины перезагружать ее, т.к. нет маршрута.
Проверяю, что конфигурационный файл корректен и соединение устанавливается:
root@mail:~# openvpn --config /etc/openvpn/client.conf
соединение установлено, но если я не прописал в /etc/rc.local
сеть OpenVPN
увижу только из консоли и подключиться из вне к VPS
не смогу, поэтому нужна перезагрузка.
Шаг №9:
После перезагрузки проверяю, что могу подключиться по SSH
и подключившись вижу сеть через OpenVPN:
ekzorchik@navy:~$ ssh -l root mail.ekzorchik.com -p 22300 root@mail:~# ip r 0.0.0.0/1 via 10.8.0.21 dev tun0 default via 95.181.198.1 dev eth0 proto static 10.8.0.0/24 via 10.8.0.21 dev tun0 10.8.0.21 dev tun0 proto kernel scope link src 10.8.0.22 95.181.198.0/24 dev eth0 proto kernel scope link src 95.181.198.14 128.0.0.0/1 via 10.8.0.21 dev tun0 172.33.33.0/24 via 10.8.0.21 dev tun0 172.35.35.0/24 via 10.8.0.21 dev tun0 root@mail:~# ping 172.33.33.16 PING 172.33.33.16 (172.33.33.16) 56(84) bytes of data. 64 bytes from 172.33.33.16: icmp_seq=1 ttl=63 time=5.90 ms 64 bytes from 172.33.33.16: icmp_seq=2 ttl=63 time=8.48 ms ^C --- 172.33.33.16 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 5.904/7.193/8.483/1.292 ms root@mail:~#
смотрю на vpn.ekzorchik.ru
что соединение установлено:
root@ekzorchik:~# tail -f /var/log/openvpn/ipp.txt | grep mail mail.ekzorchik.com,10.8.0.20
Отлично, подключаюсь и могу взаимодействовать с сетью за OpenVPN
, что мне и требовалось. В последующий практический заметках я буду показывать чтобы не забыть дальнейшие шаги по настройки почтового сервиса.
А пока заметка завершена. С уважением автор блога Олло Александр aka ekzorchik.