# OpenVPN Lab > **Задачи:** 1. Установить openvpn сервер 2. Настроить vpn сервер и перенести клиентский конфиг на конечную машину 3. Настроить доступ из локальной сети клиента до сети сервера и наоборот <br> ### Установка openvpn сервера Установка vpn сервера будет выполняться с помощью скрипта `curl -L https://install.pivpn.io | bash`   > Данный vpn предназначался для Raspberry Pi, но установщик так же поддерживает и полноценные рабочие станции и имеет под капотом удобный клиент для работы с конфигурациями. После выполнения команды, мы видим ряд интерактивных окон, с помощью которых мы можем совершить первичную конфигурацию нашего ovpn сервера.<br><br><br> ![](https://i.imgur.com/AWY7VQA.png) Первым делом нам предлагают настроить сеть <br> ![](https://i.imgur.com/VEr1kQC.png) Далее установщик замечает, что на сервере стоит не RPI OS, но это не страшно, так как Debian/Ubuntu также подойдут <br> ![](https://i.imgur.com/2N1lMHm.png) Данный скрипт также позволяет инсталлировать WireGuard, но в рамках этой практики он нам не нужен. Выбираем **OpenVPN** <br><br> ### Настройка Openvpn сервера Пользуясь утилитой pivpn добавляем нового клиента ``` root@Debian-10:/etc/openvpn$ pivpn add nopass How many days should the certificate last? 1080 ======================================================== Done! user.ovpn successfully created! user.ovpn was copied to: /home/user/ovpns for easy transfer. Please use this profile only on one device and create additional profiles for other devices. ======================================================== ``` Теперь в директории ~/ovpns будет лежать наш клиентский конфиг, с помощью которого можно будет коннектиться к нашему vpn серверу. Теперь нужно добавить маршруты для нашего клиента, чтобы расширить область его видимости в vpn сети. Push routs мы добавим не в server.conf, а в отдельный файл нашего пользователя в директории **ccd**, чтобы прокидывать маршруты для отдельных клиентов, а не для всех пользователей нашего vpn сервера. В файле `/etc/openvpn/ccd/user` уже содержится информация о том, в какую подсеть и с каким адресом попдает клиент при подключении `ifconfig-push 10.19.94.2 255.255.255.0`. Сейчас нам нужно просто указать другие подсети, которые мы хотим открыть для клиента, для этого мы в этом же файле пропишем `push "route 172.16.11.0 255.255.255.0"` и `push "route 172.16.12.0 255.255.255.0"` --- Но наш локальный сервер не виден из WAN сети, поэтому мы настроим на pfsense port forwarding до vpn сервера, а клиенты в свою очередь в конфигурацинном файле будут указывать ip адрес этого pfsense.![](https://i.imgur.com/cP6Y3Ne.png) <br> Теперь нужно доставить клиентский конфиг конечному узлу, с которого будет инциализированно подключение к vpn сети. Делать это будем с помощью python server'а, который мы поднимем на том же порту, что и vpn, но использовать будем tcp, а не udp, что позволит нам избежать конфликта открытых портов, а pfsense с уже настроеным port forwarding'ом позволит достучаться до нашего конфига. <br> ![](https://i.imgur.com/pBYzXMo.jpg) <p style="text-align: center;">Запуск python server</p> ![](https://i.imgur.com/eL6sDUv.jpg) <p style="text-align: center;">wget конфиг на клиенте</p> Далее в самом конфиге в качестве сервера нужно выставить адрес pfsense![](https://i.imgur.com/db3PNgZ.jpg) <br><br> ### Настройка доступа до локальной сети сервера и клиента Теперь можно инициализировать подключение `sudo openvpn configname.ovpn` ![](https://i.imgur.com/BiWSBPx.jpg) Проверяем, что у нас появился виртуальный интерфейс tun0 и получил свой ip адрес <br> ![](https://i.imgur.com/AqvgTyO.png) Так же проверяем, что наш vpn работает и прокинутые push route работают <br> --- В итоге мывидим локальную сеть сервера со стороны клиента, теперь получим доступ до локальной сети клиента со стороны сервера. Для начала нужно в pfsense выставить статичный маршрут, который все пакеты, идущие в LAN сеть клиента отправит к ovpn серверу. ![](https://i.imgur.com/IBZecPJ.png) <br> Далее на самом vpn сервере нужно включить ip forward `sysctl -w net.ipv4.ip_forward=1`, для того, чтобы мы могли направить пришедший пакет дальше, так же нужно добавить статичный маршрут `ip route 172.16.4.0/24 via 10.144.191.5 dev tun0`, чтобы знать куда именно направить пришедший пакет. Так же нам нужно написать правило для iptables, чтобы направить пришедший трафик на правильный интерфейс используя nat. `iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -o tun0 -j MASQUERADE` Проверим доступность локальной сети клиента, для этого выполним пинг из сети `172.16.3.0/24` ![](https://i.imgur.com/vrmAbjr.png) ## Итог Мы подняли OpenVPN сервер и настроили VPN туннель, который связывает 2 локальные сети и имеем доступ с любой машины в одной из этих сетей до другой.