1

У меня есть сервер 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 

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

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

1 ответ1

2

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

Чтобы достичь определенного хоста 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 обозначает S 'IP-адрес в 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 установит маршруты на 0.0.0.0/1 и 128.0.0.0/1 на C через S, которые более специфичны, чем маршрут по умолчанию, и могут легко быть удаленным, когда туннель остановлен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .