인터넷 트래픽을 라우팅하기 위한 OpenVPN 서버 구성

인터넷 트래픽을 라우팅하기 위한 OpenVPN 서버 구성

OpenVPN을 구성하는 데 문제가 있습니다.

연결되면 이런 일이 발생합니다. 클라이언트 192.168.42.6에서 서버 192.168.42.1을 핑할 수 있고 그 반대의 경우도 마찬가지입니다. 192.168.42.1(http 및 dns)의 서버에서 수신 대기 데몬에 액세스할 수 있습니다. 인터넷 IP를 사용하여 서버에 액세스할 수 있지만 연결이 VPN에서 라우팅되지 않습니다(추적 경로를 만들었고 홈 라우터를 통과합니다). 다른 인터넷 IP에는 액세스할 수 없습니다(nmap 추적 경로에서는 192.168.42.1이 한 줄만 표시됩니다!).

내 OpenVPN 서버 구성은 다음과 같습니다.

port 443
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 192.168.42.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 192.168.42.1"
duplicate-cn
keepalive 10 120
tls-auth ta.key 0
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
verb 4
script-security 2
push "redirect-gateway def1"
auth-user-pass-verify /home/openvpn/chroot/login.php via-file
port-share 127.0.0.1 4433
max-clients 10
daemon

다음은 내 iptables 구성의 일부입니다.

# current configuration (i removed some lines concerning other ports)
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

# lines added for OpenVPN
iptables -A FORWARD -i tun0 -o em1 -s 192.168.42.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o em1 -j MASQUERADE

어떡해? 도와 줘서 고맙다.

답변1

귀하의 질문과 구성을 통해 귀하는 서버를 통해 클라이언트에 대한 인터넷 액세스를 허용하려는 것으로 가정합니다.

그렇다면 openvpn 구성이 올바른 것 같습니다.

그러나 필터링이 완료되지 않았습니다. 그대로, tun0에서 em0(서버의 이더넷 연결로 가정)으로 새 패킷을 전달하도록 설정했지만 후속 패킷이나 em0에서 tun0으로의 패킷은 전혀 전달하지 않도록 설정했습니다. 거의 모든 인터넷 프로토콜에는 양방향 통신이 필요합니다.

따라서 구성에 다음 줄을 추가하겠습니다.

iptables -A FORWARD -i tun0 -o em1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i em1 -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

또한 /proc/sys/net/ipv4/ip_forward에 1이 포함되어 있는지 확인하고 그렇지 않은 경우 다음을 실행해야 합니다.

sudo echo "1" > /proc/sys/net/ipv4/ip_forward

배포판에 따라 마지막 설정을 영구적으로 만드는 방법이 있어야 합니다(명령은 다음 재부팅까지만 지속되도록 만듭니다).

관련 정보