Update README.md
This commit is contained in:
78
README.md
78
README.md
@@ -54,3 +54,81 @@ easyrsa build-client-full gateway-client nopass
|
|||||||
cp pki/ca.crt pki/issued/server.crt pki/private/server.key /usr/local/etc/openvpn/
|
cp pki/ca.crt pki/issued/server.crt pki/private/server.key /usr/local/etc/openvpn/
|
||||||
```
|
```
|
||||||
## Настройка сервера
|
## Настройка сервера
|
||||||
|
Создаём конфиг сервера:
|
||||||
|
```
|
||||||
|
cat << 'EOF' > /usr/local/etc/openvpn/openvpn.conf
|
||||||
|
dev ovpn0
|
||||||
|
dev-type tun
|
||||||
|
proto udp
|
||||||
|
port 443
|
||||||
|
topology subnet
|
||||||
|
server 10.210.0.0 255.255.255.0
|
||||||
|
client-config-dir /usr/local/etc/openvpn/ccd
|
||||||
|
route 0.0.0.0 0.0.0.0
|
||||||
|
push "redirect-gateway def1 bypass-dhcp"
|
||||||
|
client-to-client
|
||||||
|
cipher AES-128-GCM
|
||||||
|
data-ciphers AES-128-GCM
|
||||||
|
ca /usr/local/etc/openvpn/ca.crt
|
||||||
|
cert /usr/local/etc/openvpn/server.crt
|
||||||
|
key /usr/local/etc/openvpn/server.key
|
||||||
|
dh none
|
||||||
|
keepalive 10 120
|
||||||
|
persist-key
|
||||||
|
persist-tun
|
||||||
|
status /var/log/openvpn-status.log
|
||||||
|
verb 3
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
Также ссоздадим директоррию для индивидуальных настроек клиентов (client specific overrides):
|
||||||
|
```
|
||||||
|
mkdir -p /usr/local/etc/openvpn/ccd
|
||||||
|
```
|
||||||
|
ВАЖНОЕ ЗАМЕЧАНИЕ.
|
||||||
|
Обратите внимание на строку `route 0.0.0.0 0.0.0.0` в конфиге. Это значит, весь трафик будет перенаправлен в интерфейс ovpn0. Поэтому далее будет применена магия FreeBSD - FIBs (таблицы маршрутизации) и PF (фильтрация пакетов), с помощью которых легко и элегантно можно применить policy-based routing.
|
||||||
|
#### Шаг 1. Настройка ядра FreeBSD на работу с двумя таблицами (FIB)
|
||||||
|
По умолчанию во FreeBSD одна таблица маршрутизации. Добавим вторую:
|
||||||
|
```
|
||||||
|
echo 'net.fibs="2"' >> /boot/loader.conf
|
||||||
|
```
|
||||||
|
*Чтобы применить это без перезагрузки всего сервера, выполните команду в консоли:*
|
||||||
|
```
|
||||||
|
sysctl net.fibs=2
|
||||||
|
```
|
||||||
|
#### Шаг 2. Включаем Packet Filtering:
|
||||||
|
```
|
||||||
|
nano /etc/pf.conf
|
||||||
|
```
|
||||||
|
Если создался новый файл - это нормально. Значит pf на данной системе ещё не применялся. Добавим в файл следующее:
|
||||||
|
```
|
||||||
|
# Разрешаем весь трафик на vpn-интерфейсе и принудительно переключаем его на rtable 1 (FIB 1)
|
||||||
|
match in on ovpn0 rtable 1
|
||||||
|
|
||||||
|
# Пропускаем трафик (базовое правило, если у вас нет других ограничений)
|
||||||
|
pass all
|
||||||
|
```
|
||||||
|
Включаем PF в автозагрузку и запускаем его:
|
||||||
|
```
|
||||||
|
sysrc pf_enable="YES"
|
||||||
|
```
|
||||||
|
```
|
||||||
|
service pf start
|
||||||
|
```
|
||||||
|
### Шаг 3. Включаем OpenVPN.
|
||||||
|
```
|
||||||
|
service openvpn restart
|
||||||
|
```
|
||||||
|
SSH-сессия должна остаться активной, так как дефолтная таблица маршрутизации (FIB 0) сервера не изменилась. Проверить, что интерфейс поднялся, можно стандартно: `ifconfig ovpn0`
|
||||||
|
Проверить, как выглядят маршруты внутри изолированной таблицы, можно командой:
|
||||||
|
```
|
||||||
|
netstat -rn -F 1
|
||||||
|
```
|
||||||
|
Осталось добавить директивы для нашего клиента-шлюза:
|
||||||
|
```
|
||||||
|
cat << 'EOF' > /usr/local/etc/openvpn/ccd/gateway-client
|
||||||
|
ifconfig-push 10.210.0.254 255.255.255.0
|
||||||
|
iroute 0.0.0.0 0.0.0.0
|
||||||
|
push-remove "redirect-gateway def1 bypass-dhcp"
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
На этом настройку сервера можно считать завершённой.
|
||||||
Reference in New Issue
Block a user