<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.rtzra.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>RTzRa&#039;s hive - software:openvpn</title>
        <description>Все работает</description>
        <link>https://wiki.rtzra.ru/</link>
        <lastBuildDate>Sun, 19 Jul 2026 21:00:42 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wiki.rtzra.ru/_media/wiki/logo.png</url>
            <title>RTzRa&#039;s hive</title>
            <link>https://wiki.rtzra.ru/</link>
        </image>
        <item>
            <title>OpenVPN и маршруты в клиентские сети - создано</title>
            <link>https://wiki.rtzra.ru/software/openvpn/openvpn-routes-to-client-network</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;openvpn_i_marshruty_v_klientskie_seti&quot;&gt;OpenVPN и маршруты в клиентские сети&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Иногда при использовании OpenVPN бывает необходимо попадать с сервера в клиентские сети. Например, к серверу OpenVPN подключается два клиента с подсетями 192.168.100.0/24 и 192.168.101.0/24 и с сервера необходимо добавить маршруты в подсети этих клиентов. Стандартными настройками это не делается, нужно прикручивать скрипты.
&lt;/p&gt;

&lt;p&gt;
Устанавливаем утилиту ipcalc:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt install ipcalc&lt;/pre&gt;

&lt;p&gt;
Создаем скрипты /etc/openvpn/client-connect.sh и /etc/openvpn/client-disconnect.sh
&lt;/p&gt;

&lt;p&gt;
/etc/openvpn/client-connect.sh
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Скрипт выполняется при подключении каждого клиента&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Логируем запуск&lt;/span&gt;
logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Client &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt; connected with IP &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Проверяем CCD файл клиента&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;co0&quot;&gt;# Ищем iroute директивы&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;= &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; line; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$line&lt;/span&gt;&amp;quot;&lt;/span&gt; =~ ^iroute&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;network&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[1]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;netmask&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[2]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co0&quot;&gt;# Конвертируем в CIDR&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;cidr&lt;/span&gt;=$&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ipcalc &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$netmask&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Netmask&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;print $4&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;co0&quot;&gt;# Добавляем маршрут на сервере&lt;/span&gt;
                &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;ip route&lt;/span&gt; add &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; via &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt;&amp;quot;&lt;/span&gt; dev &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$dev&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Логируем действие&lt;/span&gt;
                logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Added route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; via &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt; (client: &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;)&amp;quot;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Выводим в лог OpenVPN&lt;/span&gt;
                &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es4&quot;&gt;$(date)&lt;/span&gt;: Added route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; via &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt; for client &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
/etc/openvpn/client-disconnect.sh
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Скрипт выполняется при отключении клиента&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Проверяем CCD файл клиента&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;= &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; line; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$line&lt;/span&gt;&amp;quot;&lt;/span&gt; =~ ^iroute&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;network&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[1]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;netmask&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[2]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re2&quot;&gt;cidr&lt;/span&gt;=$&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ipcalc &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$netmask&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Netmask&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;print $4&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;co0&quot;&gt;# Удаляем маршрут&lt;/span&gt;
                &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;ip route&lt;/span&gt; del &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Логируем&lt;/span&gt;
                logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Removed route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; (client: &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt; disconnected)&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Так же необходимо добавить в конфиг OpenVPN несколько строк, которые добавят вызов скриптов при подключении/отключении клиента.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;script-security 3  # или 2, если 3 не работает
client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh&lt;/pre&gt;

&lt;p&gt;
Добавляем в конфигурационный файл клиента:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ifconfig-push 172.16.1.10 255.255.255.0
iroute 192.168.100.0 255.255.255.0&lt;/pre&gt;

&lt;p&gt;
172.16.1.10 - IP который будет назначен клиенту при подключении
&lt;/p&gt;

&lt;p&gt;
iroute 192.168.100.0 255.255.255.0 - добавляет адрес подсети клиента, который и будет добавляется в маршруты
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Fri, 26 Dec 2025 14:11:00 +0000</pubDate>
        </item>
    </channel>
</rss>
