OpenVPN 클라이언트-클라이언트


17

client-to-client비활성화 된 상태에서 TUN (계층 3) OpenVPN 서버를 사용하는 경우 클라이언트가 여전히 서로 대화 할 수 있습니다.

클라이언트-클라이언트 구성은 설명서에 따라이를 방지해야합니다.

클라이언트가 VPN을 통해 서로 연결할 수있게하려면 클라이언트-클라이언트 지시문의 주석을 해제하십시오. 기본적으로 클라이언트는 서버에 도달 할 수만 있습니다.

이 옵션을 사용하지 않을 때 클라이언트가 계속 서로 통신 할 수있는 이유는 무엇입니까?

내 서버 conf는 다음과 같습니다.

port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4

답변:


54

경우 client-to-client입니다 활성화 (즉, 커널) 호스트의 IP 계층에 보내지 않고 내부적으로, VPN 서버 전달 클라이언트 간 패킷을. 호스트 네트워킹 스택은 이러한 패킷을 전혀 보지 못합니다.

           .-------------------.
           | IP Layer          |
           '-------------------'


           .-------------------.
           | TUN device (tun0) |
           '-------------------'


           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  2   
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

경우 client-to-client이다 장애인 , 다른 클라이언트에 클라이언트에서 패킷 (iptables에, 테이블 등 라우팅) VPN 서버 호스팅하는 컴퓨터의 호스트 IP 계층을 통해 이동 : IP 포워딩이 활성화 된 경우 , 호스트가 패킷을 전달할 수를 (사용하여 라우팅 테이블)을 다시 TUN 인터페이스로 보내면 VPN 데몬이 패킷을 터널 내부의 올바른 클라이언트로 전달합니다.

           .-------------------.
           | IP Layer          |  (4) routing, firewall, NAT, etc.
           '-------------------'      (iptables, nftables, conntrack, tc, etc.)
              ^          |
          3   |          |  5
              |          v
           .-------------------.
           | TUN device (tun0) |
           '-------------------'
             ^           |
          2  |           |  6  
             |           v
           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  7  
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

이 경우 ( client-to-client비활성화 됨) iptables를 사용하여 클라이언트 간 패킷을 차단할 수 있습니다.

 iptables -A FORWARD -i tun0 -o tun0 -j DROP

tun0VPN 인터페이스는 어디에 있습니까 ?


이것을 답변으로 표시했습니다. 간결하지만 매우 유익하고 실제로 대답에 iptables 방화벽 규칙을 제공합니다.
lobi

1
다이어그램에 대해 궁금한 점이 있습니다. 문자별로, 공간별로 그림을 그리시겠습니까? 아니면 간단하고 빠르게 앱을 사용하는 데 도움이됩니까?
Mohammed Noureldin

3
@MohammedNoureldin, asciiart 다이어그램을 위한 WYSWYG 포인트 앤 클릭 편집기 인 asciio ( search.cpan.org/dist/App-Asciio )로 원본 다이어그램을 만들었습니다 .
ysdx

고마워요, 당신은 창문에서 그것을 운영 했습니까? 그것은 중세 시대의 응용 프로그램 인 것처럼 보이며 Windows에서 실행할 수 없었으며 camelbox 패키지로 설치하려고했지만 항상 404 오류가 발생합니다.
Mohammed Noureldin

2
@MohammedNoureldin, 저는 Windows를 사용하지 않습니다. 데비안을 사용하고 있으며 패키지에서 직접 설치할 수 있습니다.
ysdx

5

openvpn처음 읽을 때 반드시 명확하지는 않지만 맨 페이지의 다음 단락 에서이 질문에 대한 답변을 제공합니다.

OpenVPN 서버 모드는 단일 tun 또는 tap 인터페이스를 통해 여러 클라이언트를 처리하기 때문에 사실상 라우터입니다. 이 --client-to-client 플래그는 OpenVPN에 모든 클라이언트 시작 트래픽을 TUN / TAP 인터페이스로 푸시하지 않고 클라이언트-클라이언트 트래픽을 내부적으로 라우팅하도록 지시합니다.

이 옵션을 사용하면 각 클라이언트는 현재 연결된 다른 클라이언트를 "확인"합니다. 그렇지 않으면 각 클라이언트는 서버 만 보게됩니다. 클라이언트 별 사용자 지정 규칙을 사용하여 터널 트래픽을 방화벽으로하려면이 옵션을 사용하지 마십시오.

client-to-client옵션은 서버의 일반 라우팅 테이블을 단락시킵니다. 이를 제거해도 클라이언트가 서버의 라우팅 테이블을 사용하는 것을 막을 수는 없습니다. 이러한 라우팅 테이블과 서버의 방화벽 구성이 클라이언트가 서로를 볼 수있게하면 그렇게 할 수 있습니다.


5

당신은 그것을 말한대로 단지 지시어를 주석보다 더 많은 일을 할 필요가 여기 :

이 지시문의 주석을 해제하여 다른 클라이언트가 서로 "볼 수있게"하십시오. 기본적으로 클라이언트는 서버 만 볼 수 있습니다. 클라이언트가 서버 만 보도록하려면 서버의 TUN / TAP 인터페이스를 적절히 방화벽으로 설정해야합니다.

따라서 각 클라이언트에 대해 별도의 IP 주소 정책을 구성 할 수 있습니다. https://openvpn.net/index.php/open-source/documentation/howto.html 에서 클라이언트 별 규칙 및 액세스 정책 구성 섹션을 참조 하십시오 . 그리고 여기에 https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client가 있습니다.


그런 다음 이것은 내가 생각한 것을 의미합니다.이를 달성하는 유일한 방법은 각 클라이언트를 다른 서브넷에 두는 것입니다. 이것은 대부분 질문에 대한 답변이며, 그 방법에 대한 문서를 제공했습니다. 이것을 답으로 표시하겠습니다. 감사.
lobi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.