Das Pingen eines externen Servers durch den OpenVPN-Tunnel funktioniert nicht

Das Pingen eines externen Servers durch den OpenVPN-Tunnel funktioniert nicht

Ich habe einen OpenVPN-Server und einen Client und möchte diesen Tunnel verwenden, um nicht nur auf 10.0.8.0/24das Internet, sondern auf das gesamte Internet zuzugreifen. Bisher tun0funktioniert das Pingen des Servers vom Client über die Schnittstelle und umgekehrt.

www.google.comDas Pingen vom Client aus tun0funktioniert jedoch nicht (alle Pakete gehen verloren).

Ich dachte, ich sollte den Server so konfigurieren, dass alle Pakete, die aus tun0dem Internet kommen, weitergeleitet werden. Daher habe ich mir diese iptables-Konfigurationszeile ausgedacht:

interface_connecting_to_the_internet='eth0'
interface_openvpn='tun0'
internet_ip_address=`ifconfig "$interface_connecting_to_the_internet" | sed -n s'/.*inet \([0-9.]*\).*/\1/p'`

iptables -t nat -A POSTROUTING -o "${interface_connecting_to_the_internet}" -j SNAT --to-source "${internet_ip_address}"
echo '1' > /proc/sys/net/ipv4/ip_forward

Dies funktioniert jedoch nicht, die Pakete gehen immer noch verloren und ich frage mich, was möglicherweise mit meinem Setup nicht stimmt.


Ein paar Details:

IP-Route gibt auf dem Server:

default via 176.31.127.254 dev eth0  metric 3 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
127.0.0.0/8 via 127.0.0.1 dev lo 
176.31.127.0/24 dev eth0  proto kernel  scope link  src 176.31.127.109 

IP-Route gibt auf dem Client aus:

default via 192.168.1.1 dev wlan0  proto static 
10.8.0.1 via 10.8.0.5 dev tun0 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6 
127.0.0.0/8 via 127.0.0.1 dev lo  scope link 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.109 

  • Der Client verwendet WLAN-Adapter wlan0und TUN-Adapter tun0.
  • Der Server verwendet Ethernet-Adapter eth0und TUN-Adapter tun0.
  • Das VPN erstreckt sich über10.0.8.0/24

  • Sowohl Client als auch Linux verwenden Linux 3.6.1.

Antwort1

Um die Diskussion zusammenzufassen:

Um einen bestimmten Host A über ein VPN vom Client C zum Server S zu erreichen, muss man:

  • IP-Weiterleitung auf S ( sysctl -w net.ipv4.ip_forward=1) aktivieren
  • Aktivieren Sie entweder Masquerading oder Snat über iptables auf S: iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADEoder iptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ipmit der offensichtlichen Bedeutung von ext_ifund ext_ip.
  • Richten Sie ein entsprechendes Routing auf C ein, entweder (S bezeichnet die IP-Adresse von Sim VPN):
    • durch Festlegen einer expliziten Route nach A über S:ip route add A via S dev vpn_if
    • durch das Setzen einer Standardroute über S: ip route add default via S dev vpn_if, wobei man auch eine entsprechende Route nach S: setzen muss ip route add S via previous_gateway dev prev_if.
    • durch die Verwendung auf dem Server, wobei OpenVPN Routen zu und auf C über S push "redirect-gateway def1"einrichtet , die spezifischer als die Standardroute sind und leicht entfernt werden können, wenn der Tunnel gestoppt wird.0.0.0.0/1128.0.0.0/1

verwandte Informationen