모든 트래픽에 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.