내가 찾은 유일한 것은 "그렇습니다, OpenVPN은 TCP를 통한 연결을 지원합니다"라는 것입니다. . 탭 인터페이스 를 만들 거나 동일한 구성을 가진 서버의 다른 인스턴스를 동시에 실행하도록 권장하는 매우 오래된 가이드를 찾았 습니다. 전자는 단순한 것에 비해 너무 복잡해 보이고 후자는 쓸모없는 것으로 보인다.
내가 찾은 유일한 것은 "그렇습니다, 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을 연결할 수 있다고 생각합니다.
tun
인터페이스에는 MAC 계층이 없으므로 브리지의 구성원이 될 수 없습니다. 브리징을 원하면tap
인터페이스 를 사용해야 합니다.