私は周りを検索しましたが、見つかったのは "はい、OpenVPNはTCP経由の接続をサポートします" ですが、openvpnサーバーに同じポートをリッスンするよう強制する方法は見つかりませんでした。両方のプロトコルに対して同時に。 creating tap interfaces に関する非常に古いガイドをいくつか見つけました。または、同じ構成で同時に実行しているサーバーの別のインスタンスを持つことをお勧めします。前者は単純なものには複雑すぎるように見え、後者は時代遅れのようです。
同じopenvpnプロセスは、UDPとTCPソケットを同時にリッスンすることはできません。
2つの適切なオプションがあります。
openvpnには2つのタップインターフェイスを使用します。各タップインターフェイスに1つずつ、2つのopenvpnサーバープロセスがあります。 1つはUDPでリッスンし、もう1つはTCPでリッスンする必要があります。サーバー上のこれら2つのタップインターフェイスをブリッジします。
2つのtunインターフェースを使用します。これらをブリッジすることはできないため、TCPとUDPクライアントの間でIPスペースを共有する場合は、次のようなlearn-address
スクリプトを使用する必要があります- http://thomas.gouverneur.name/2014/02/openvpn-listen-on-tcp-and-udp-with-tun/ (ただし、この特定のスクリプトは/ tmpシンボリックリンク攻撃に対して脆弱です。/tmpへのロギングを使用する場合は削除してください)。
3つ目のオプションは、2つのopenvpnインスタンスを実行し、別々のクライアントIPスペースを両方に割り当てることです(たとえば、同じ/ 24サブネットからそれぞれ1つ/ 25)。これにより、ブリッジングとアドレス学習スクリプトの必要性が回避されます。
編集:私は自分でそのようなアドレス学習スクリプトが必要だったので、私はそれを書きました。私はそれをパブリックドメインに配置します。
#!/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ログに記録されます。
OpenVPNサーバーがUDPポートの代わりにTCPポートでリッスンするようにしたい場合は、
proto tcp
の代わりにproto udp
を使用します(OpenVPNが両方のUDPおよびTCPポート、2つの個別のOpenVPNインスタンスを実行する必要があります)。
このページが古いということですか?
2つのOpenVPNサーバー(TCP用に1つ、UDP用に1つ)を実行して、それぞれをTUNでブリッジし、TUNを接続できると思います。