OpenVPN 킬 스위치가 작동하지 않습니다


0

OpenVPN이 실행되고 있지 않으면 나가는 연결을 끊는 킬 스위치가 필요합니다. 그렇지 않으면 VPN이 의미가 없기 때문에 연결이 끊어지고 연결이 있으면 실제 IP가 해제됩니다.

1.2.3.4는 VPN 서버 주소이고 킬 스위치 스크립트를 실행 한 후 내 iptables라고 가정 해 보겠습니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  255.255.255.255      anywhere
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             255.255.255.255
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16
DROP       all  --  anywhere            !1.2.3.4

이모 그것은 잘 작동합니다. 그러나 로컬 트래픽이 진행되는 동안 인터넷에 연결할 수 없습니다. 이 구성에 문제가 있습니까?

이 상황에서 내 컴퓨터는 Raspberry Pi 3이며 OpenVPN over TCP를 사용하고 있으며 Fritz.Box가 WAN에 연결되어 있습니다.

오류가 보입니까? 내 스크립트는 다음과 같습니다

#!/bin/bash

# check that OpenVPN is actually running.
running=$(ps -e | grep openvpn)
if [ $? -eq 1 ]; then
    echo "No active VPN session found."
    exit 1
fi

iptables -F

# Get WAN IP
WAN_IP=$(wget -q -O - http://ipecho.net/plain)

# Configure IPTable rules
# Change eth0 to wlan0 (or whatever network interface is being used) for wireless
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 255.255.255.255 -j  ACCEPT
iptables -A INPUT -s 255.255.255.255 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A OUTPUT -o eth0 ! -d $WAN_IP -j DROP

https://github.com/qbwaggle/vpnkillswitch/blob/master/vpnkillswitch.sh , https://www.reddit.com/r/VPN/comments/43djk3/generic_kill_switch_script_for_openvpn_linux/ 소스로 구성되어 있습니다.

이 스크립트도 직접 시도했지만 작동하지 않습니다 (동일한 오류라고 생각합니까?).

어떤 아이디어? 미리 감사드립니다.


이러한 경우에는 "실제 IP를 해제" 할 수 없습니다 (라우터와 DHCP와 통신하는 것을 포함 함). 그들이하는 것은 단지 IP 주소가 사용되는 것을 막는 것입니다.
grawity

이유가 무엇이든 OpenVPN이 실패하면 프로그램은 VPN 서버로 터널링되지 않는 방식을 사용합니다. 클라이언트가 연결 한 서버는 ISP에서받은 실제 WAN IP 주소를 얻습니다. 그것은 전체 의사 소통 과정을 저에게 연결시키는 것입니다. 설명 된 방식으로 "실제 IP를 릴리스"합니다. 아니면 내가 틀렸어? 편집 : 어쩌면 "실제"라는 단어가 그다지 적합하지 않다는 것을 의미 할 수 있습니다.
Jonniboy

아, 그래서 당신은 '공개'의 의미에서 '출시'를 의미했습니다.
grawity

@grawity Yep. 그러나 문제를 해결할 무언가를 알고 있습니까? : D
Jonniboy

@MariusMatutiae 물론이지? 혼자서 문제를 해결할 시간이 없었으므로 아이디어가 있다면 알려주세요.
Jonniboy

답변:


1

OpenVPN은 다음 지시문이있을 때 외부 스크립트를 사용할 수 있습니다.

 script-security 2

클라이언트 구성 파일에 포함되어 있습니다. 지시문을 사용하십시오

up /path/to/executable/script
down /path/to/another/executable/script

인터페이스를 설정하거나 종료 할 때이 두 스크립트를 실행합니다. 귀하의 경우 up 은 관련이 없지만 OpenVPN이 중단되면 down 을 사용 하여 모든 네트워크 인터페이스를 중단하여 암호화되지 않은 채널을 통해 트래픽이 유출되지 않도록 할 수 있습니다. OpenVPN을가 중단 또는 분리되면, 그 통지하시기 바랍니다 너무 오래 당신의 클라이언트가 연결되어 생각으로 이 없을 것 누출 트래픽이 여전히 전송 암호화 된 (그리고 아마도 압축)되어 있기 때문에 OpenVPN을 서버에. 따라서 가로 챌 수 없습니다.

다운 다음과 같이 스크립트를 작성할 수 있습니다 :

#!/bin/bash
find /sys/class/net  -mindepth 1 -maxdepth 1  -exec sh -c '[ "$1" != "lo" ] && ip link set dev $(basename $1) down' something {}   \;

PC가 작동하는 데 필요한 lo 를 제외한 모든 인터페이스 가 다운 됩니다 .


다른 방법으로하는 것이 좋습니다. 다음 주말에 시험해 볼게요. 그러나 내 iptables에 어떤 문제가 있는지 알고 있습니까?
Jonniboy

@Jonniboy 게시 하지 않은 스크립트의 오류 는 OpenVPN이 UDP를 통한 것으로 가정하고 명시 적으로 TCP를 통한 것으로 가정한다는 것입니다. 대신 게시 한 스크립트가 작동해야합니다.
MariusMatutiae
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.