настройка сценария на Linux-машине для научных вычислений [закрыто]

Один и тот же процесс openvpn не может одновременно прослушивать UDP и TCP сокеты.

У вас есть два хороших варианта:

  1. использовать два интерфейса tap для openvpn. Иметь два серверных процесса openvpn, по одному для каждого интерфейса tap; один должен прослушивать UDP, другой - TCP. Установите мост между этими двумя интерфейсами tap на сервере.

  2. используйте два tun-интерфейса. Они не могут быть объединены в мост, поэтому если вы хотите разделить IP-пространство между TCP и UDP клиентами, вам нужно использовать learn-address скрипт, подобный тому, что находится по адресу http://thomas.gouverneur.name/2014/02/openvpn-listen-on-tcp-and-udp-with-tun/ (однако, этот конкретный скрипт уязвим для атаки симлинка /tmp, поэтому удалите ведение журнала в /tmp, если вы его используете).

Третий вариант - просто запустить два экземпляра openvpn и назначить обоим отдельное клиентское IP-пространство (например, по одному /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.

2
20.03.2019, 14:29
0 ответов

Теги

Похожие вопросы