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


13

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

답변:


11

동일한 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 로그로 끝나야합니다.


4

OpenVPN 서버가 UDP 포트 대신 TCP 포트에서 수신하도록하려면 proto tcp대신 대신 사용하십시오 proto udp(OpenVPN이 UDP 및 TCP 포트 모두에서 수신되도록하려면 두 개의 개별 OpenVPN 인스턴스를 실행해야합니다).

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

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


1
tun인터페이스에는 MAC 계층이 없으므로 브리지의 구성원이 될 수 없습니다. 브리징을 원하면 tap인터페이스 를 사용해야 합니다.
András Korn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.