
Ich habe einen OpenVPN-Server und einen Client und möchte diesen Tunnel verwenden, um nicht nur auf 10.0.8.0/24
das Internet, sondern auf das gesamte Internet zuzugreifen. Bisher tun0
funktioniert das Pingen des Servers vom Client über die Schnittstelle und umgekehrt.
www.google.com
Das Pingen vom Client aus tun0
funktioniert jedoch nicht (alle Pakete gehen verloren).
Ich dachte, ich sollte den Server so konfigurieren, dass alle Pakete, die aus tun0
dem 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
wlan0
und TUN-Adaptertun0
. - Der Server verwendet Ethernet-Adapter
eth0
und TUN-Adaptertun0
. Das VPN erstreckt sich über
10.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 MASQUERADE
oderiptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ip
mit der offensichtlichen Bedeutung vonext_if
undext_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 mussip 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/1
128.0.0.0/1
- durch Festlegen einer expliziten Route nach A über S: