내가 찾은 유일한 것은 “그렇습니다, OpenVPN은 TCP를 통한 연결을 지원합니다”라는 것입니다. . 탭 인터페이스 를 만들 거나 동일한 구성을 가진 서버의 다른 인스턴스를 동시에 실행하도록 권장하는 매우 오래된 가이드를 찾았 습니다. 전자는 단순한 것에 비해 너무 복잡해 보이고 후자는 쓸모없는 것으로 보인다.
답변
동일한 openvpn 프로세스가 UDP 및 TCP 소켓에서 동시에 수신 할 수 없습니다.
두 가지 좋은 옵션이 있습니다.
-
openvpn에는 두 개의 탭 인터페이스를 사용하십시오. 각 탭 인터페이스마다 하나씩 두 개의 openvpn 서버 프로세스가 있습니다. 하나는 UDP에서, 다른 하나는 TCP에서 수신 대기해야합니다. 서버에서이 두 개의 탭 인터페이스를 연결하십시오.
-
두 개의 툰 인터페이스를 사용하십시오. 이들은 브리지 될 수 없으므로 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을 연결할 수 있다고 생각합니다.