tl;dr(@krisFR로 몇 시간 동안 디버깅한 후): 최소한 Debian 8에서는 OpenVPN에 가상 인터페이스(eth0:1)를 사용하지 말고, 대신 여기에 설명된 새로운 debian iproute2
방법(수동 접근 방식)을 적용하세요.https://wiki.debian.org/NetworkConfiguration#iproute2_method. 트래픽을 잘 라우팅할 것입니다.
모든 클라이언트 트래픽이 터널을 통해 전송되어야 하는 컴퓨터에 OpenVPN을 설정하려고 했기 때문에 이것이 내 서버 구성의 일부입니다.
local x.x.x.243
port 443
proto udp
dev tun
server 172.31.1.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
그리고 내 클라이언트 구성은 다음과 같습니다.
pull
resolv-retry infinite
mute-replay-warnings
redirect-gateway def1
script-security 1
클라이언트는 VPN에 연결할 수 있고 에서 VPN 호스트를 핑할 수 있지만 172.31.1.1
, 도메인이나 IP로 google.com을 핑하려고 하면 메시지가 나타납니다 Request timeout for icmp_seq 0
...
이 문제의 원인은 무엇입니까? 참고로 저는 모든 방화벽을 제거했으며 현재 IPTables를 다음과 같이 설정하고 있습니다.
iptables -A INPUT -i eth0:1 -m state --state NEW -p udp --dport 443 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0:1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0:1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.31.1.0/24 -o eth0:1 -j MASQUERADE
iptables -A OUTPUT -o tun+ -j ACCEPT
감사합니다.
그래서 클라이언트 213.30.5.46
(Google IP 중 하나)에 핑을 시도했지만 작동하지 않았지만 다음과 같은 결과를 얻었습니다.
나가는 VPN IP(eth0:1)에서 수신 대기:tcpdump -i eth0 -t host x.x.x.243
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 113
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP vpn.exampledomain.com.https > [CLIENT_IP x..].51060: UDP, length 81
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145
동시에 tun0을 듣고 다음과 같은 결과를 얻었습니다.tcpdump -i tun0
23:40:39.864798 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 0, length 64
23:40:40.925951 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 256, length 64
23:40:41.886679 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 512, length 64
23:40:42.906125 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 768, length 64
출력은 다음과 같습니다 iptables -L -n -v
.
Chain INPUT (policy ACCEPT 34772 packets, 2265K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- eth0:1 * 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:443
13 1092 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1437 96985 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- tun+ eth0:1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth0:1 tun+ 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 32574 packets, 7919K bytes)
pkts bytes target prot opt in out source destination
13 1092 ACCEPT all -- * tun+ 0.0.0.0/0 0.0.0.0/0
메모: /proc/sys/net/ipv4/ip_forward
으로 설정되어 있습니다 1
.
tcpdump -i eth0:1 -t host 213.30.5.46
대상을 ping하는 동안 타겟팅됨 :
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0:1, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 0, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 256, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 512, length 64
IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 768, length 64
클라이언트에 아무 것도 표시되지 않고 결국 ping이 시간 초과됩니다.
OpenVPN에서 사용하는 IP 주소 는 다음과 같이 바로 설정 local x.x.x.243
됩니다 .\etc\network\interfaces
eth0:1
eth0
auto eth0:1
iface eth0:1 inet static
address x.x.x.243
gateway x.x.x.129
netmask 255.255.255.128
dns-nameservers x.x.x.4 x.x.x.104
답변1
당신이 말했듯이, 우리는 이것을 디버깅하기 위해 함께 몇 시간을 보냅니다...
우리가 수행한 모든 테스트와 검색한 모든 추적과 관련하여 마침내 가상 인터페이스와 관련하여 몇 가지 이상한 동작이 발생한 것으로 나타났습니다 eth0:1
.
예:http://lartc.org/howto/lartc.iproute2.html
대부분의 Linux 배포판과 대부분의 UNIX는 현재 arp, ifconfig 및 Route 명령을 사용합니다. 이러한 도구는 작동하는 동안 Linux 2.2 이상에서 예상치 못한 동작을 보여줍니다. 예를 들어, GRE 터널은 요즘 라우팅의 필수적인 부분이지만 완전히 다른 도구가 필요합니다.
iproute2를 사용하면 터널은 도구 세트의 필수 부분입니다.
우리는 인터페이스 에 여러 IP를 할당하는 방식을 변경하기 위해 파일 iproute2
수정 으로 전환하기로 결정했습니다 ./etc/network/interfaces
eth0
그 후 모든 것이 잘 진행되고 작동했습니다!
iproute2
예 :
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.42
netmask 255.255.255.0
gateway 192.168.1.1
iface eth0 inet static
address 192.168.1.43
netmask 255.255.255.0
여기 에 대한 추가 정보 iproute2
: