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/
|
||||
```
|
||||
## Настройка сервера
|
||||
Создаём конфиг сервера:
|
||||
```
|
||||
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