
あちこち探してみたら唯一発見したのは「はい、OpenVPN は TCP 経由の接続をサポートしています。」しかし、openvpnサーバーが両方のプロトコルに対して同じポートでリッスンするように強制する方法が見つかりませんでした。とても古いガイドを見つけました。タブインタフェースの作成または、同じ構成で別のサーバーインスタンスを同時に実行することをお勧めします。前者は単純なことをするには複雑すぎるように見えますが、後者は時代に遅れているようです。
答え1
同じopenvpnプロセスはUDPとTCPソケットを同時に受信できません。
2つの良いオプションがあります。
openvpn には 2 つの Tap インターフェイスを使用します。 2つのopenvpnサーバープロセスがあり、各タップインターフェースごとに1つずつ、1つはUDPを受信し、もう1つはTCPを受信する必要があります。サーバーはこれら2つのTapインターフェースを接続します。
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インスタンスのみを実行し、2つのインスタンスに別々のクライアントIPスペースを割り当てることです(たとえば、同じ/ 24サブネット内の1つの/ 25)これにより、ブリッジングとアドレススクリプトを学ぶ必要がなくなります。
編集:そのような学習アドレススクリプトが直接必要だったので、1つを書きました。公開ドメインに投稿しました。
#!/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
sudo ip ro change $addr/32 dev $dev || sudo ip ro add $addr/32 dev $dev # if a route already existed, add will fail but change should work, and vice versa
;;
delete)
# even if a client connects to one OpenVPN instance first, then reconnects to the other before the first connection times out, the "add" case above sets up the correct route; it may thus not be necessary to delete routes, ever
# echo "sudo ip ro del $addr/32 dev $dev" >&2
# sudo ip ro del $addr/32 dev $dev
# exit 0 # ignore errors
;;
update)
echo "sudo ip ro change $addr/32 dev $dev" >&2
sudo ip ro change $addr/32 dev $dev \
|| exec sudo ip ro add $addr/32 dev $dev # 'change' can fail with ENOENT, in which case we must 'add'
;;
esac
スクリプトはstderrに書き込まれ、最終的にopenvpnログに表示されます。
答え2
OpenVPNサーバーがUDPポートではなくTCPポートでリッスンするようにするには、代わりに
proto tcp
使用しますproto udp
(OpenVPNがUDPポートとTCPポートの両方でリッスンするようにするには、2つの別々のOpenVPNインスタンスを実行する必要があります)。
ページが古いという意味ですか?
2つのOpenVPNサーバー(TCP用1台、UDP用1台)を実行してTUNに接続してからTUNを接続できるようです。