Bug 234684

Summary: security/openvpn: ERROR: FreeBSD route add command failed: external program exited with error status: 1
Product: Ports & Packages Reporter: Aleks <Z462vasa>
Component: Individual Port(s)Assignee: Matthias Andree <mandree>
Status: Closed Not A Bug    
Severity: Affects Only Me CC: pi
Priority: --- Flags: mandree: maintainer-feedback+
Version: Latest   
Hardware: Any   
OS: Any   

Description Aleks 2019-01-07 08:03:39 UTC
openvpn

FreeBSD 11.1-STABLE #0 r332428

Sun Jan  6 22:43:02 2019 us=463520 /sbin/ifconfig tap0 10.8.0.1 10.8.0.2 mtu 1500 netmask 255.255.255.0 up
Sun Jan  6 22:43:02 2019 us=467855 /sbin/route add -net 10.8.0.0 10.8.0.2 255.255.255.0
add net 10.8.0.0: gateway 10.8.0.2 fib 0: route already in table
Sun Jan  6 22:43:02 2019 us=469645 ERROR: FreeBSD route add command failed: external program exited with error status: 1
Comment 1 Kurt Jaeger freebsd_committer freebsd_triage 2019-01-07 08:15:18 UTC
Assigning this type of bug to phabric-admin@ is strange, as phabric-admin
is responsible for phabric, not other stuff.

The openvpn error message explains it: The route added already existed, so
it complains. Can you elaborate why this should be wrong ?
Comment 2 Kubilay Kocak freebsd_committer freebsd_triage 2019-01-07 08:19:00 UTC
If this turns out to be a base (route(8)) issue, please change the Product/Component accordingly
Comment 3 Kubilay Kocak freebsd_committer freebsd_triage 2019-01-07 08:20:15 UTC
@Aleks Could you please provide your full OpenVPN server and client configuration as attachments.

Don't forget to sanitize any security sensitive details, such as keys, usernames, passwords, hostnames, ip addresses, etc.
Comment 4 Aleks 2019-01-07 09:01:09 UTC
#
# [  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
# [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
# [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
# [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
# [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
# [101,102] [105,106] [109,110] [113,114] [117,118]
# [121,122] [125,126] [129,130] [133,134] [137,138]
# [141,142] [145,146] [149,150] [153,154] [157,158]
# [161,162] [165,166] [169,170] [173,174] [177,178]
# [181,182] [185,186] [189,190] [193,194] [197,198]
# [201,202] [205,206] [209,210] [213,214] [217,218]
# [221,222] [225,226] [229,230] [233,234] [237,238]
# [241,242] [245,246] [249,250] [253,254]

mode server

# указываем на каком локальном интерфейсе OpenVPN будет слушать
# по умолчанию OpenVPN слушает все интерфейсы
# Можно не задавать, тогда сервер будет принимать подключения на всех интерфейсах.
local 178.*.*.*

# порт на котором работает сервер
port 1194

# протокол - TCP или UDP
proto udp

# используемый тип устройства и номер
dev tap0

dev-type tap
dev-node /dev/tap0

#dev tun0

#dev-type tun
#dev-node /dev/tun0

# указываем по каким интерфейсам можно подключаться к OpenVPN по telnet
# указывать нужно IP адреса интерфейсов сервера
# management localhost 8329
 management 192.168.3.1 8329
# #management 86.86.xxx.xx 8329

# client.crt - Сертификат клиента, нужен только клиенту
# client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
# ta.key - TLS-ключ, нужен и клиенту и серверу

# Главный CA сертификат, этот файл нужен и клиенту и серверу
ca /usr/local/etc/openvpn/keys/ca.crt

# уСертификат сервера, нужен только серверу
cert /usr/local/etc/openvpn/keys/server.crt

# Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
key /usr/local/etc/openvpn/keys/server.key

# ключ Диффи Хельман, этот файл нужен только серверу
dh /usr/local/etc/openvpn/keys/dh.pem

# указываем где находится файл отозванных сертификатов
#crl-verify /usr/local/etc/openvpn/crl.pem

# задаем IP-адрес сервера и маску подсети (виртуальной сети)
  server   10.8.0.0 255.255.255.0

ifconfig 10.8.0.1  10.8.0.2
#  ifconfig 10.8.0.1 255.255.254.0    #  254.0 different netmask to support 10.8.1.0/24 range
#  ifconfig-pool 10.8.0.4 10.8.0.253

# указываем внутренний DNS и WINS серверы
#push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 192.168.0.10"
#push "dhcp-option WINS 192.168.0.1"


 topology "subnet"
 push "topology subnet"
#--ifconfig 10.8.0.1 255.255.255.0
# ifconfig 10.8.0.1  10.8.0.2
  push "route-gateway 10.8.0.1"

 route-method exe
# route-delay

# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть за OpenVPN сервером
# Офис
push "route 10.8.0.0 255.255.255.0"
# Филиал №1
push "route 192.168.10.0 255.255.255.0"
# Филиал №2
push "route 192.168.2.0 255.255.255.0"
# Филиал №3
push "route 192.168.3.0 255.255.255.0"

# указываем где хранятся файлы с
# настройками IP-адресов клиентов
# client-config-dir ccd
  client-config-dir /usr/local/etc/openvpn/ccd # директория с индивидуальными настройками клиентов

# добавляем маршрут сервер-клиент
route 10.8.0.0 255.255.255.0 10.8.0.2
#- route 10.8.0.0 255.255.255.0
# Филиал №1
route 192.168.10.0 255.255.255.0 10.8.0.2
# Филиал №2
route 192.168.2.0 255.255.255.0  10.8.0.2
# Филиал №3
route 192.168.3.0 255.255.255.0 10.8.0.2


# разрешает видеть клиентам друг друга (по виртуальным IP)
# по умолчанию клиенты видят только сервер
client-to-client

# разрешать подключаться с одинаковым сертификатом/ключом
duplicate-cn

# включаем TLS аутентификацию
# tls-server

# для дополнительной безопасности при
# использовании SSL/TLS, создайте "HMAC firewall"
# для защиты от DoS аттак и флуда UDP порта.
#
# сгенерируйте с помощью:
#   openvpn --genkey --secret ta.key
#
# сервер и каждый клиент должны иметь копию этого ключа.
# второй параметр выставляется в '0' для сервера и '1' для клиентов.
# tls-auth /usr/local/etc/openvpn/keys/ta.key 0

# TLS таймаут, полезен если выход в интернет осуществляется
# через GPRS мобильных операторов
# tls-timeout 120

# выбираем алгоритм хеширования по умолчанию используется SHA1
# вывод полного списка командой openvpn --show-digests
auth SHA1

# выберите криптографический сертификат.
# этот пункт конфига должен копироваться
# в конфиг клиента, так же как он установлен здесь.
# по умолчанию используется/рекомендуется BF-CBC
# вывод полного списка командой openvpn --show-ciphers
#cipher BF-CBC        # Blowfish (default)
#cipher AES-128-CBC   # AES

# сжатия трафика VPN туннеля с помощью библиотеки LZO
# если вы включили сжатие на сервере,
# вы так же должны включить и в конфиге у клиента
comp-lzo
push "comp-lzo"

# максимальное количество одновременно подключенных клиентов
max-clients 100

# от какого пользователя и группы будет работать OpenVPN
user root
group openvpn

# имеет смысл использовать при использовании протокола udp
#mssfix 1450

# эти опции позволяют избежать необходимости
# получения доступа к определенным ресурсам
# после рестарта, т.к. это может быть невозможным
# из-за понижения привилегий.
persist-key
persist-tun

# путь к файлу записи статуса OpenVPN в лог
status /var/log/openvpn/openvpn-status.log

# путь к файлу записи событий происходящих на сервере
# "log" - запись событий в лог будет перезаписываться при перезагрузке демона
# "log-append" - запись событий будет добавляться в лог
log /var/log/openvpn/openvpn.log

# установите необходимый уровень логирования.
# 0 - ничего, за исключением фатальных ошибок
# 4 - подойдет для получения общих сведений
# 5 и 6 пригодяться для отладки проблем соединения
# 9 - максимально возможная информация
verb 5

push "comp-lzo"

# максимальное количество одновременно подключенных клиентов
max-clients 100

# от какого пользователя и группы будет работать OpenVPN
user root
group openvpn

# имеет смысл использовать при использовании протокола udp
#mssfix 1450

# эти опции позволяют избежать необходимости
# получения доступа к определенным ресурсам
# после рестарта, т.к. это может быть невозможным
# из-за понижения привилегий.
persist-key
persist-tun

# путь к файлу записи статуса OpenVPN в лог
status /var/log/openvpn/openvpn-status.log

# путь к файлу записи событий происходящих на сервере
# "log" - запись событий в лог будет перезаписываться при перезагрузке демона
# "log-append" - запись событий будет добавляться в лог
log /var/log/openvpn/openvpn.log

# установите необходимый уровень логирования.
# 0 - ничего, за исключением фатальных ошибок
# 4 - подойдет для получения общих сведений
# 5 и 6 пригодяться для отладки проблем соединения
# 9 - максимально возможная информация
verb 5

# макс кол-во однотипных записей в лог
#mute 20

push "comp-lzo"

# максимальное количество одновременно подключенных клиентов
max-clients 100

# от какого пользователя и группы будет работать OpenVPN
user root
group openvpn

# имеет смысл использовать при использовании протокола udp
#mssfix 1450

# эти опции позволяют избежать необходимости
# получения доступа к определенным ресурсам
# после рестарта, т.к. это может быть невозможным
# из-за понижения привилегий.
persist-key
persist-tun

# путь к файлу записи статуса OpenVPN в лог
status /var/log/openvpn/openvpn-status.log

# путь к файлу записи событий происходящих на сервере
# "log" - запись событий в лог будет перезаписываться при перезагрузке демона
# "log-append" - запись событий будет добавляться в лог
log /var/log/openvpn/openvpn.log

# установите необходимый уровень логирования.
# 0 - ничего, за исключением фатальных ошибок
# 4 - подойдет для получения общих сведений
# 5 и 6 пригодяться для отладки проблем соединения
# 9 - максимально возможная информация
verb 5

# макс кол-во однотипных записей в лог
#mute 20

## Add route to Client routing table for the OpenVPN Server
push "route 10.8.0.1 255.255.255.255"

## Add route to Client routing table for the OpenVPN Subnet
push "route 10.8.0.0 255.255.255.0"
Comment 5 Aleks 2019-01-07 09:17:55 UTC
route delete  10.8.0.0/24  &&  route add -net 10.8.0.0/24 10.8.0.2
Comment 6 Aleks 2019-01-07 09:19:39 UTC
10.8.0.0/24        link#4             U          tap0
10.8.0.1           link#4             UHS         lo0
127.0.0.1          link#3             UH          lo0
178.*.*.0/24   link#1             U          bce0
178.*.*.*    link#1             UHS         lo0
192.168.2.0/24     10.8.0.2           UGS        tap0
192.168.3.0/24     10.8.0.2           UGS        tap0
192.168.3.1        link#2             UHS         lo0
192.168.3.10       link#2             UHS         lo0
192.168.3.10/32    link#2             U          bce1
192.168.10.0/24    10.8.0.2           UGS        tap0
Comment 7 Matthias Andree freebsd_committer freebsd_triage 2019-01-08 22:39:17 UTC
* reporter does not heed OpenVPN man page, which explicitly states
  Don't use --server if you are ethernet bridging.  Use --server-bridge instead.

* reporter is using a non-supported FreeBSD version

This is a non-supported configuration that is documented as such, not a bug.
Comment 8 Aleks 2019-01-09 10:28:34 UTC
)))))
12.0-STABLE FreeBSD 12.0-STABLE ddd  amd64



Wed Jan  9 12:16:54 2019 us=364497 TUN/TAP device /dev/tun0 opened
Wed Jan  9 12:16:54 2019 us=364530 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Wed Jan  9 12:16:54 2019 us=364566 /sbin/ifconfig tun0 10.8.0.1 10.8.0.2 mtu 1436 netmask 255.255.255.0 up
Wed Jan  9 12:16:54 2019 us=368676 /sbin/route add -net 10.8.0.0 10.8.0.2 255.255.255.0
add net 10.8.0.0: gateway 10.8.0.2 fib 0
Wed Jan  9 12:16:54 2019 us=371363 /sbin/route add -net 10.8.0.0 10.8.0.2 255.255.255.0
add net 10.8.0.0: gateway 10.8.0.2 fib 0: route already in table
Wed Jan  9 12:16:54 2019 us=374114 ERROR: FreeBSD route add command failed: external program exited with error status: 1
Comment 9 Matthias Andree freebsd_committer freebsd_triage 2019-01-09 20:15:21 UTC
(In reply to Aleks from comment #8)
Using FreeBSD 12.0 does not remedy the misconfiguration. Point being?
Comment 10 Aleks 2019-01-10 15:33:21 UTC
1. Why do I need a bridge?




2. other port
  with such settings is not working !!!


# cd /usr/ports/net/rinetd && make install clean
# echo 'rinetd_enable="YES"' >> /etc/rc.conf
#sockstat
#allow  194.44.221.30     #... ..... . ...... IP ..... .....
#allow 192.168.2.122           #...... ... .... .......... ....
logcommon                      #... ... .....
logfile /var/log/rinetd.log    #.......... ... ... ....


allow 192.168.*.*
allow 192.168.3.*
allow 192.168.31.*
deny 224.*.*.*
deny 172.16.*.*
deny 172.16.*.*
deny 10.*.*.*
deny 169.254.*.*
Comment 11 Matthias Andree freebsd_committer freebsd_triage 2019-01-10 17:03:40 UTC
Please stop using this bug tracking system 
a. for support inquiries. These belong directly on the project's support channels.
b. for matters unrelated to this summary, such as rinetd.

I will now unsubscribe from the bug and mark ignore bug mail and will not see or care about future updates to this bug.

Please make sure you use the right medium for your respective inquiries.