[unix] TCP 및 UDP 포트를 모두 청취하도록 OpenVPN을 만드는 방법

내가 찾은 유일한 것은 “그렇습니다, OpenVPN은 TCP를 통한 연결을 지원합니다”라는 것입니다. . 탭 인터페이스만들 거나 동일한 구성을 가진 서버의 다른 인스턴스를 동시에 실행하도록 권장하는 매우 오래된 가이드를 찾았 습니다. 전자는 단순한 것에 비해 너무 복잡해 보이고 후자는 쓸모없는 것으로 보인다.



답변

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

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

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

  2. 두 개의 툰 인터페이스를 사용하십시오. 이들은 브리지 될 수 없으므로 TCP와 UDP 클라이언트간에 IP 공간을 공유하려면 http://thomas.gouverneur.name/2014/02/openvpn-learn-address 와 같은 스크립트 를 사용해야합니다. listen-on-tcp-and-udp-with-tun / (단,이 특정 스크립트는 / tmp symlink 공격에 취약하므로 사용하는 경우 / 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
                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 포트 모두에서 수신되도록하려면 두 개의 개별 OpenVPN 인스턴스를 실행해야합니다).

이 페이지가 더 이상 사용되지 않습니까?

두 개의 OpenVPN 서버 (TCP 용, UDP 용)를 각각 TUN으로 브리지 한 다음 TUN을 연결할 수 있다고 생각합니다.


답변