OpenVPN을 사용하여 경로를 푸시하는 데 문제가 있습니다.
내 설정은 다음과 같습니다
회로망
- 국토: 10.0.0.0/24
- 개방형 VPN: 10.8.0.0/24
- 인터넷상의 VPS
서버(모두 Linux)
- 서버 1: 10.0.0.13 + 10.8.0.1(OpenVPN 서버)
- 서버 2: 10.0.0.11(DHCP+DNS)
- VPS: 인터넷 IP + 10.8.0.X(OpenVPN의 임의 IP)
OpenVPN 서버 구성
..snip..
push "route 10.0.0.0 255.255.255.0"
push "dhcp-option DNS 10.0.0.11"
..snip..
IP 전달이 활성화되었습니다
cat /proc/sys/net/ipv4/ip_forward
1
라우팅된 VPS
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default www.xxx.yyy.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0
10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0
10.8.0.5 * 255.255.255.255 UH 0 0 0 tun0
www.xxx.yyy.1 * 255.255.255.255 UH 0 0 0 eth0
라우팅 서버 1
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
VPS에서 openvpn-server(10.8.0.1)를 ping해 보세요.
ping 10.0.0.13
ping 10.0.0.13 -I tun0;#gives same result
VPS용 tcpdump
tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
19:05:22.049141 IP 10.8.0.6 > 10.8.0.1: ICMP echo request, id 17966, seq 1, length 64
19:05:22.101397 IP 10.8.0.1 > 10.8.0.6: ICMP echo reply, id 17966, seq 1, length 64
TCP 덤프 서버 1
tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
18:05:22.064139 IP 10.8.0.6 > 10.8.0.1: ICMP echo request, id 17966, seq 1, length 64
18:05:22.064399 IP 10.8.0.1 > 10.8.0.6: ICMP echo reply, id 17966, seq 1, length 64
18:05:23.065687 IP 10.8.0.6 > 10.8.0.1: ICMP echo request, id 17966, seq 2, length 64
18:05:23.065886 IP 10.8.0.1 > 10.8.0.6: ICMP echo reply, id 17966, seq 2, length 64
작동하지 않는 것은 VPS에서 서버 1의 내부 IP로의 연결입니다.
VPS에서 openvpn-server(10.0.0.13)를 ping해 보세요.
VPS용 tcpdump
19:12:24.847216 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18136, seq 1, length 64
19:12:25.876441 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18136, seq 2, length 64
19:12:26.900408 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18136, seq 3, length 64
19:12:27.924476 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18136, seq 4, length 64
19:12:39.964724 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18137, seq 1, length 64
19:12:40.980446 IP vps.hoster.tld > 10.0.0.13: ICMP echo request, id 18137, seq 2, length 64
Server1의 tcpdump
#stays empty
그래서 저는 여기서 무엇이 잘못되고 있는지 정말로 알고 싶습니다. 내 VPS에서 내부 IP 10.0.0.0/24로의 트래픽을 차단하는 것이 무엇인지 알아내기 위한 다음 단계는 무엇입니까? 어쩌면 집에 있는 방화벽이 트래픽을 차단하고 있는 것일까요? 알아내는 방법?
답변1
내부 인터페이스에 도달 중, 경로 없음
기본적으로 Linux는 모든 인터페이스의 모든 IP에 응답하며 "잘못된" 인터페이스의 ARP 요청에도 응답합니다. 이는 매우 안전하지 않으므로 대부분의 방화벽은 이 동작을 방지하기 위해 iptables 및 proc/arp_filter를 사용합니다.
라우팅을 차단하는 방화벽 규칙이 있을 수 있습니다.
server1> iptables -L -n -v
server1> iptables -t nat -L -n -v
server1> iptables -A FORWARD -j LOG
server1을 통해 10.8과 10.0 사이에 라우팅된 모든 패킷이 기록됩니다(dmesg). 그것은 당신에게 몇 가지 정보를 줄 수도 있습니다.
$server1> iptables -D FORWARD -j LOG
규칙을 삭제합니다.
다음은 방화벽 규칙 앞에 라우팅 규칙을 삽입합니다.
server1> echo 1 > /proc/sys/net/ipv4/ip_forward
server1> iptables -I FORWARD 1 --in-interface tun0 --source 10.8.0.0/24 -j ACCEPT
server1> iptables -I FORWARD 1 --in-interface eth0 --source 10.0.0.0/24 -j ACCEPT
나는 그것이 작동할 것이라고 기대하지 않지만 VPS> ping 10.0.0.11
만약 그렇다면 문제는 거의 확실하게 server1의 iptables에 있습니다.
server1 지점 간 라우팅을 수행하므로 ARP를 수행해서는 안 되지만 둘 중 하나가 1로 설정된 경우 아마도 방화벽 스크립트에 의해 수행되고 문제는 server1의 iptables에 있을 것입니다.
server1> cat /proc/sys/net/ipv4/conf/all/arp_filter
server1> cat /proc/sys/net/ipv4/conf/tun0/arp_filter
노선
경로는 괜찮아 보이지만 이 설정을 사용하면 10.8.0.0/24 경로가 필요하지 않습니다. 10.8.0.1 ~ 10.8.0.5는 지점 간입니다.
default gw
VPS에는 , 10.8.0.1 via tun0
및 가 있어야 합니다 10.0.0.0/24 via gw 10.8.0.1
. server1에는 및 , 및 가
있어야 합니다 .default gw
10.8.0.5 via tun0
10.0.0.0/24 via eth0