모든 트래픽에 OpenVPN이 기본 게이트웨이가 아님


21

클라이언트가 OpenVPN을 실행하는 VPS를 통해 모든 트래픽을 전달하도록 노력하고 있습니다. 보시다시피 도메인과 원시 IP 주소 모두에 핑을 허용하지만 curl 및 traceroute를 통한 트래픽과 같은 트래픽은 발생하지 않습니다. VPN에 연결되지 않은 경우 트래픽이 올바르게 작동합니다.

모든 정보는 여기에 있습니다 : https://pastebin.com/tGspNefn

고맙습니다.

아래 솔루션 덕분에 작동하는 구성 :

섬기는 사람:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

고객:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3

/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 왜 netmask 128.0.0.0입니까?
— Antony Gibbs


3
다음에는 관련 정보를 추출 하여 질문에 포함시킵니다. Pastebin 스 니펫의 수명은 제한되어 있습니다.
— MLu

답변:


34

솔루션에는 두 부분이 있습니다.

1. 모든 트래픽을 터널로 리디렉션

가장 쉬운 해결책은 OpenVPN의 --redirect-gateway autolocal옵션을 사용 하거나 구성 파일에 다음과 같이 넣으십시오 redirect-gateway autolocal.

2. OpenVPN 서버의 트래픽 처리

이제 터널이 작동하면 모든 트래픽이 터널로 이동하여 tun0인터페이스 에서 서버 끝 부분에 나타납니다 .

작동하려면 두 가지를 구성해야합니다.

에이. 패킷 전달 사용

대부분의 배포에서 기본적으로 패킷 전달은 비활성화되어 있으므로 터널 인터페이스의 패킷은이를 공용 인터페이스로 만들지 않습니다. 다음을 사용하여 전달을 활성화해야합니다.

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

테스트가 완료되면 /etc/sysctl.conf

또한 iptables전달 된 트래픽을 차단하지 않는지 확인하십시오 .

~ # iptables -I FORWARD -j ACCEPT

이것은 테스트하기에 충분합니다. 프로덕션 환경에서는 방화벽 규칙을 좀 더 구체적으로 만들고 싶지만 여기서는 범위를 벗어납니다.

비. 터널에서 나가는 패킷 NAT

전달이 활성화되면 기본적으로 패킷은 소스 주소가 변경되지 않은 상태로 전달됩니다. 즉, 10.8.0.6이러한 경우 패킷은 ISP 게이트웨이에서 삭제되거나 목적지로 패킷 을 보내 더라도 응답이 되돌아 오는 길을 찾지 못합니다. 이 개인 주소는 인터넷에서 라우팅 할 수 없습니다.

해결책은 송신 트래픽을 NAT하는 것입니다. 즉, 개인 10.8.0.6주소를 VPN 서버의 공용 IP로 바꾸십시오 . 그러면 회신이 VPN 서버에 도달하여 터널로 다시 전달됩니다.

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. 테스트

이제 ping 8.8.4.4VPN 클라이언트에서 시도 하십시오. 답장이 보일 것입니다. 그렇지 않은 경우 알려주십시오 :)


이것은 지금 완벽하게 작동합니다. 고품질 답변에 감사드립니다.
— DrDinosaur

클라이언트 쪽에서 client.conf 파일에 add pull을 추가하거나 명령 줄에 --pull 옵션을 추가하여 클라이언트가 서버에서 푸시 한 구성을 수락하도록합니다. 또한 클라이언트가 Windows Vista 이상에서 실행되는 경우 UAC를 사용하지 않도록 설정하면 클라이언트에서 실행중인 openpn 서비스가 경로를 설정할 수 없습니다.
— Viktor

> b. 터널에서 나가는 패킷을 NAT 나에게 도움이되었습니다.
— FelikZ

FORWARD -j ACCEPT 규칙은 서버가 모든 인터페이스 사이에서 개방형 라우터가되도록한다는 점을 실제로 고려하십시오. 프로덕션 시스템에서 사용해서는 안됩니다. 그러나 HowTo의 경우 기본적으로 매우 우수한 명령어 세트를 신속하게 작동시킵니다.
— Sprinterfreak

합니까 Redirect all the traffic into the tunnel클라이언트 설정 단계를?
— 항공기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.