Пинг внешнего сервера через туннель OpenVPN не работает

Пинг внешнего сервера через туннель OpenVPN не работает

У меня есть сервер OpenVPN и клиент, и я хочу использовать этот туннель для доступа не только ко всему 10.0.8.0/24интернету, но и ко всему интернету. Пока что пинг сервера с клиента через tun0интерфейс работает, и наоборот.

Однако пинг www.google.comс клиента tun0не работает (все пакеты теряются).

Я решил, что мне следует настроить сервер так, чтобы любой пакет, поступающий из tun0пункта назначения в Интернете, пересылался, поэтому я придумал следующую строку конфигурации iptables:

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

Однако это не работает, пакеты по-прежнему теряются, и мне интересно, что могло быть не так с моей настройкой.


Некоторые подробности:

ip route дает на сервере:

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 дает на клиенте:

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 

  • клиент использует адаптер Wi-Fi wlan0и адаптер TUN tun0.
  • сервер использует адаптер Ethernet eth0и адаптер TUN tun0.
  • VPN охватывает10.0.8.0/24

  • и клиент, и Linux используют Linux 3.6.1.

решение1

Подводя итоги обсуждения:

Чтобы добраться до определенного хоста A через VPN от клиента C к серверу S, необходимо:

  • включить переадресацию IP на S ( sysctl -w net.ipv4.ip_forward=1)
  • включите либо маскировку, либо snat через iptables на S: iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADEили iptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ipс очевидным значением ext_ifи ext_ip.
  • настроить соответствующую маршрутизацию на C, либо (S обозначает IP-адрес Sв VPN):
    • установив явный маршрут к A через S:ip route add A via S dev vpn_if
    • путем установки маршрута по умолчанию через S:, ip route add default via S dev vpn_ifгде также необходимо установить соответствующий маршрут к S ip route add S via previous_gateway dev prev_if:.
    • с помощью push "redirect-gateway def1"на сервере, в этом случае OpenVPN установит маршруты к C 0.0.0.0/1и 128.0.0.0/1на C через S, которые являются более конкретными, чем маршрут по умолчанию, и могут быть легко удалены при остановке туннеля.

Связанный контент