OpenVPN이 TCP 및 UDP 포트를 동시에 수신하도록 만드는 방법

OpenVPN이 TCP 및 UDP 포트를 동시에 수신하도록 만드는 방법

여기저기 찾아봤더니 유일하게 발견한 건"예, OpenVPN은 TCP를 통한 연결을 지원합니다.", 그러나 openvpn 서버가 두 프로토콜 모두에 대해 동일한 포트에서 수신하도록 강제하는 방법을 찾지 못했습니다. 아주 오래된 가이드를 찾았어요탭 인터페이스 생성또는 동일한 구성으로 다른 서버 인스턴스를 동시에 실행하는 것이 좋습니다. 전자는 단순한 일을 하기에는 너무 복잡해 보이는 반면, 후자는 시대에 뒤떨어진 것 같습니다.

답변1

동일한 openvpn 프로세스는 UDP 및 TCP 소켓을 동시에 수신할 수 없습니다.

두 가지 좋은 옵션이 있습니다.

  1. openvpn에는 두 개의 Tap 인터페이스를 사용하십시오. 두 개의 openvpn 서버 프로세스가 있으며, 각 탭 인터페이스마다 하나씩, 하나는 UDP를 수신해야 하고 다른 하나는 TCP를 수신해야 합니다. 서버에서 이 두 Tap 인터페이스를 연결합니다.

  2. 두 개의 tun 인터페이스를 사용하십시오. 이는 브리지될 수 없으므로 TCP와 UDP 클라이언트 간에 IP 공간을 공유하려면 learn-address다음과 같은 스크립트를 사용해야 합니다.http://thomas.gouverneur.name/2014/02/openvpn-listen-on-tcp-and-udp-with-tun/(단, 이 특정 스크립트는 /tmp 심볼릭 링크 공격에 취약하므로 이를 사용하는 경우 /tmp에 대한 로깅을 제거하십시오.)

세 번째 옵션은 두 개의 openvpn 인스턴스만 실행하고 두 인스턴스에 별도의 클라이언트 IP 공간을 할당하는 것입니다(예: 동일한 /24 서브넷에서 각각 하나의 /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
                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 포트 모두에서 수신 대기하도록 하려면 두 개의 별도 OpenVPN 인스턴스를 실행해야 합니다).

페이지가 오래되었다는 뜻인가요?

두 개의 OpenVPN 서버(TCP용 하나, UDP용 하나)를 실행하고 TUN으로 연결한 다음 TUN을 연결할 수 있을 것 같습니다.

관련 정보