지금까지 암호화되지 않은 openvpn 터널을 사용하여 서버 A와 서버 B 간의 가상 링크를 성공적으로 만들었습니다. 서버 B의 트래픽 중 일부를 서버 A를 통해 라우팅하려고 합니다. 서버 B에는 5개의 외부 IP가 있고 5개의 로컬 VPN IP를 추가하여 서버 A의 5개 IP로 트래픽을 리디렉션하려고 합니다. 이렇게 하면 서버 B에게 전 세계 10개의 다른 발신 IP가 제공됩니다. 분명히 두 서버 모두에서 일부 라우팅을 수행해야 하지만 하루 동안 검색하고 읽은 후에도 결과가 나오지 않습니다.
내가 해냈어
ip route add default via 10.0.0.2 dev tun0 table vpn_table
ip rule add from 10.0.0.1/32 table vpn_table
ip rule add to 10.0.0.2/32 table vpn_table
ip route flush cache
서버 B에서는 서버 A와 동일한 상황이지만 IP가 교체되었습니다. 그러나 서버 B에서 이 작업을 수행하면 wget --bind-address=10.0.0.1 somewebsite
작동하지 않습니다. 서버 A가 요청을 처리하는 방법을 모르기 때문인 것 같습니다.
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
편집하다
누군가 서버 A에는 IP 규칙이 필요하지 않다고 제안했기 때문에 현재 상황은 다음과 같습니다.
- openvpn 링크 설정
- 서버 BI에서 위에 언급된 4개의 ip 명령을 실행합니다.
서버 A의 일부 라우팅 정보가 아직 누락된 것 같습니다. wget --bind-address=10.0.0.1 http://www.cnn.com
서버 B에서 실행할 때 서버 A의 tcpdump가 출력하는 내용은 다음과 같습니다 .
tcpdump: WARNING: arptype 65534 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
07:11:58.787908 IP 10.0.0.1.42802 > 157.166.248.10.80: S 2416144580:2416144580(0) win 14600 <mss 1410,sackOK,timestamp 858359606 0,nop,wscale 7>
07:11:59.786129 IP 10.0.0.1.42802 > 157.166.248.10.80: S 2416144580:2416144580(0) win 14600 <mss 1410,sackOK,timestamp 858359856 0,nop,wscale 7>
07:12:01.788535 IP 10.0.0.2 > 10.0.0.1: ICMP host 157.166.248.10 unreachable, length 68
07:12:01.788545 IP 10.0.0.2 > 10.0.0.1: ICMP host 157.166.248.10 unreachable, length 68
서버 B의 Wget은 다음과 같이 말합니다.
Connecting to www.cnn.com (www.cnn.com)|157.166.248.11|:80... failed: No route to host.
2014년 5월 19일에 편집됨
서버 A에 SNAT를 추가했고 이제 서버 A의 tcpdump가 나에게 제공합니다(93.184.216.119 = www.example.com, 1.2.3.4 = 서버 A의 외부 IP, 이제 10.0.0.1 원본의 패킷)
09:29:44.114475 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903625938 0,nop,wscale 7>
09:29:45.113546 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903626188 0,nop,wscale 7>
09:29:47.116587 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68
09:29:47.116668 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68
09:29:47.119289 IP 10.0.0.1.54691 > 93.184.216.119.80: S 717252699:717252699(0) win 14600 <mss 1410,sackOK,timestamp 903626689 0,nop,wscale 7>
09:29:50.120591 IP 1.2.3.4 > 10.0.0.1: ICMP host 93.184.216.119 unreachable, length 68
따라서 서버 A의 SNAT가 작동하는 것으로 보이지만 요청한 웹 사이트에 연결할 수 없습니다. 서버 A iptables 목록:
SNAT all -- 10.0.0.1 anywhere to:1.2.3.4
서버 A IP 규칙 목록:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
서버 'route -n'의 일부:
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
게이트웨이는 0.0.0.0입니다. 이것이 관련될 수 있습니까?
답변1
몇 가지 질문이 있습니다:
패킷을 원래 위치로 라우팅하는 것은 의미가 없습니다. 지금 바로
ip rule add from 10.0.0.1/32 table vpn_table
서버 A에서는 생략되어야 합니다(
ip rule add to...
필요하지 않음) . 서버 A에는 "정상" 라우팅이 있습니다. 그러나 서버 B(B의 IP 주소용)에 이러한 규칙을 설정해야 합니다.서버 A에서 SNAT를 수행해야 합니다. 비슷하다
iptables -t nat -A POSTROUTING -s 10.0.0.1 -j SNAT --to-source 1.2.3.4