# Настройка маршрутов пользователя

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нам необходимо определить какой адрес будет у пользователя при подключении и куда ему разрешается ходить.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Для начала найдем свободный </span><span lang="EN-US">ip</span><span style="mso-ansi-language: RU;">-адрес</span>

```
 grep -rn 10.8.0. /etc/openvpn/ccd
```

<span style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">Команда </span><span lang="EN-US">grep</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">пройдет по всем файлам в директории и выведет в консоль все совпадения с **10.8.0.** – адресация </span><span lang="EN-US">openvpn</span>

<span style="mso-ansi-language: RU;"> </span><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Выбираем любой адрес, которого нет в списке от 2 до 254</span>

<span style="mso-ansi-language: RU;">Проверить что вы не просмотрели свободный адрес, можно той же командой </span><span lang="EN-US">grep</span><span style="mso-ansi-language: RU;">, вбив адрес целиком. К примеру:</span>

```
grep -rn 10.8.0.38 /etc/openvpn/ccd  - найдет в конфиге такой адрес и выведет его в консоль
grep -rn 10.8.0.119 /etc/openvpn/ccd – такого адреса нет, и в консоль ничего не выведет
```

<span style="mso-ansi-language: RU;"> </span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/PBEimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/PBEimage.png)

<span style="mso-ansi-language: RU;">4. Создаем конфигурационный файл пользователя</span>

```
touch /etc/openvpn/ccd/fursov.m
```

<span lang="EN-US" style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">5. </span></span><span style="mso-ansi-language: RU;">Прописываем в нем конфигурацию</span>

```
 nano /etc/openvpn/ccd/fursov.m
```

> **<span lang="EN-US">ifconfig-push 10.8.0.111 255.255.255.0</span>**
> 
> **<span lang="EN-US">push "route 10.10.20.105 255.255.255.255"</span>**

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/4fRimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/4fRimage.png)

**<span lang="EN-US">Ifconfig</span><span style="mso-ansi-language: RU;">-</span><span lang="EN-US">push</span>**<span style="mso-ansi-language: RU;"> – какой адрес и какую маску присваивать клиенту</span>

**<span lang="EN-US">push</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">route</span>**<span style="mso-ansi-language: RU;"> – какой маршрут ему давать (до какого узла внутри сети можно будет ходить). В данном случае задан один адрес, но при желании можно указать несколько.</span>

<span lang="EN-US">push "route 10.10.20.105 255.255.255.255"</span>

<span lang="EN-US">push "route 10.10.20.106 255.255.255.255"</span>

<span lang="EN-US">push "route 10.10.20.107 255.255.255.255"</span>

<span style="mso-ansi-language: RU;">и</span> <span style="mso-ansi-language: RU;">т.д.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Сохраняем данный конфиг и оставляем в этой директории.</span>

<span style="mso-ansi-language: RU;">Настройка фаервола</span>

<span style="mso-ansi-language: RU;"> </span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">На данном шаге у нас уже имеются сертификаты пользователя, его конфиг и настройка. Осталось добавить разрешающие правила в фаервол, чтобы сервер пропустил клиента к его рабочему месту.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В качестве фаервола на сервере настроен </span><span lang="EN-US">iptables</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Чтобы посмотреть текущие настройки </span><span lang="EN-US">iptables</span><span style="mso-ansi-language: RU;">, можно ввести команду</span>

```
iptables -vnL
```

<span style="mso-ansi-language: RU;">где ключи </span>

> **<span lang="EN-US">v</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">verbose</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">т.е. подробный вывод</span>
> 
> **<span lang="EN-US">n</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">numeric</span><span style="mso-ansi-language: RU;">, вывод адресов в цифровом формате. По умолчанию он пытается вместо адресов прописать имена хостов</span>
> 
> **<span lang="EN-US">L</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">list</span><span style="mso-ansi-language: RU;">. Собственно, вывести все содержимое</span>

<span style="mso-ansi-language: RU;">В ответ мы получим достаточно большую табличку с правилами.</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/hygimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/hygimage.png)

<span style="mso-ansi-language: RU;">Основными полями являются </span>**<span lang="EN-US">source</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">(откуда) </span>**<span lang="EN-US">destination</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">(куда) ну и комментарий, чтобы каждый раз не искать по конфигам, чей это адрес.</span>

<span style="mso-ansi-language: RU;"> </span><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Для того чтобы добавить новое правило, пишем</span>

```
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.122/32 -d 10.10.10.96/32 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m– 1C"
```

<span style="mso-ansi-language: RU;">Соответственно **-**</span>**<span lang="EN-US">s</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">источник отправления (наш адрес клиента), **-**</span>**<span lang="EN-US">d</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">адрес назначения, куда мы ему разрешаем ходить. Ну</span> <span style="mso-ansi-language: RU;">и</span> <span style="mso-ansi-language: RU;">комментарий</span><span lang="EN-US">.</span>

<span lang="EN-US"><span style="mso-ansi-language: RU;"> 5. Если необходимо прописать еще и порт</span></span>

```
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.119/32 -d 10.10.21.151/32 -p tcp --destination-port 3389 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m – 1C" 
```

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Еще раз выведем </span><span lang="EN-US">iptables</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">и удостоверимся, что правило появилось</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/26wimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/26wimage.png)

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 7.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">(Опционально) Перезапуск </span><span lang="EN-US">openvpn</span><span style="mso-ansi-language: RU;">. На случай если при подключении от пользователя, по какой-то причине не применились правила, или что-то работает не корректно. При данном действии, у других пользователей могут порваться сессии, и он отвалятся.</span>

```
 systemctl restart openvpn@server
```

**<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 8.<span style="font-style: normal; font-variant: normal; font-size-adjust: none; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> ОБЯЗАТЕЛЬНО ЗАРЕЗЕРВИРОВАТЬ IP КОМПЬЮТЕРА, ИНАЧЕ ПОСЛЕ СМЕНЫ IP НЕОБХОДИМО БУДЕТ МЕНЯТЬ ПРАВИЛО</span></span></span>**