Один і той же процес openvpn не може одночасно слухати UDP і TCP-сокети.
У вас є два хороших варіанти:
використовувати два інтерфейсу для tapv для openvpn. Мати два серверні процеси openvpn, по одному для кожного інтерфейсу дотику; один повинен слухати на UDP, інший на TCP. З'єднайте ці два інтерфейси для натискання на сервері.
використовувати два інтерфейси tun. Вони не можуть бути з'єднані, тому якщо ви хочете поділити IP-простір між клієнтами TCP та UDP, вам потрібно буде використовувати такий learn-address
сценарій, як той, на веб-сторінці http://thomas.gouverneur.name/2014/02/openvpn- liste-on-tcp-and-udp-with-tun / (однак, цей специфічний скрипт вразливий до атаки / tmp symlink, тому видаліть реєстрацію до / tmp, якщо ви її використовуєте).
Третій варіант - просто запустити два екземпляри openvpn і призначити окремий ІР-простір клієнта обом (наприклад, одному / 25 з тієї ж / 24 підмережі кожен). Це дозволяє уникнути встановлення мостів та необхідності створення сценарію для вивчення адреси.
EDIT: оскільки мені був потрібен такий сценарій для вивчення адреси, я написав його. Я розміщую його у відкритому доступі.
#!/bin/sh
#
# This script allows an openvpn server with several openvpn instances that
# use tun interfaces to share client IP space by adjusting the routing table
# to create entries towards specific clients as needed
action="$1"
addr="$2"
cn="$3" # not used, but it's there; you could e.g. log it
case "$action" in
add)
echo "sudo ip ro add $addr/32 dev $dev" >&2
exec sudo ip ro add $addr/32 dev $dev
;;
delete)
echo "sudo ip ro del $addr/32 dev $dev" >&2
sudo ip ro del $addr/32
exit 0 # ignore errors
;;
update)
echo "sudo ip ro change $addr/32 dev $dev" >&2
exec sudo ip ro change $addr/32 dev $dev
;;
esac
Цей скрипт записується до stderr, який повинен опинитися в журналі openvpn.
tun
інтерфейси не мають рівня MAC і, отже, не можуть бути членами мосту. Якщо ви хочете з'єднати мости, вам потрібно використовуватиtap
інтерфейси.