OpenVPN не шлюз по умолчанию для всего трафика

21

Я пытаюсь заставить моего клиента пересылать весь трафик через VPS с OpenVPN. Как вы можете видеть, он разрешит эхо-запросы как к доменам, так и к необработанным IP-адресам, но не пропустит трафик, подобный тому, который осуществляется через curl, и traceroute ничего не обнаружит. Трафик работает правильно, когда не подключен к VPN.

Вся информация здесь: https://pastebin.com/tGspNefn

Спасибо.

Рабочие конфиги благодаря решению ниже:

Сервер:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Клиент:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3
DrDinosaur
источник
/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.5 почему маска сети 128.0.0.0?
Энтони Гиббс
Спасибо DrDinosaur за указание serverfault.com/questions/312860/…
Энтони Гиббс
3
В следующий раз извлеките соответствующую информацию и включите ее в вопрос. Отрывки пастебина имеют ограниченный срок службы.
MLu

Ответы:

34

Решение состоит из двух частей:

1. Перенаправить весь трафик в туннель

Самое простое решение - использовать --redirect-gateway autolocalопцию OpenVPN (или поместить ее в файл конфигурации как redirect-gateway autolocal.

2. Обрабатывать трафик на сервере OpenVPN

Теперь, когда туннель запущен, весь трафик поступает в туннель и всплывает в конце сервера из tun0интерфейса.

Вам нужно настроить две вещи, чтобы это работало:

а. Включить пересылку пакетов

По умолчанию в большинстве дистрибутивов пересылка пакетов отключена, поэтому пакеты из туннельного интерфейса никогда не попадают в открытый интерфейс. Вы должны включить пересылку с помощью:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

После проверки сделайте изменение постоянным в /etc/sysctl.conf

Также убедитесь, что iptablesне блокируете пересылаемый трафик:

~ # iptables -I FORWARD -j ACCEPT

Этого достаточно для тестирования - в рабочей среде вы захотите сделать правила брандмауэра более конкретными, но здесь это выходит за рамки.

б. NAT исходящие пакеты из туннеля

При включенной пересылке пакеты по умолчанию пересылаются с неизменным адресом источника, то есть в вашем случае 10.8.0.6- такие пакеты либо отбрасываются на шлюзе ISP, либо даже если они попадают в пункт назначения, ответ никогда не находит обратный путь. Эти частные адреса не маршрутизируются в Интернете.

Решение состоит в том, чтобы преобразовать исходящий трафик в NAT, т.е. заменить частный 10.8.0.6адрес публичным IP-адресом VPN-сервера. Это гарантирует, что ответы поступят на сервер VPN, и там они будут перенаправлены обратно в туннель.

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. Проверьте это

Теперь попробуйте ping 8.8.4.4с вашего VPN-клиента. Вы должны увидеть ответ. Дайте нам знать, если нет :)

мМЕ
источник
Это прекрасно работает сейчас. Большое спасибо за качественный ответ.
Доктор Динозавр
На стороне клиента добавьте add pull в файл client.conf или или добавьте параметр --pull в командную строку, чтобы клиент принял конфигурацию, выданную сервером. Также, если клиент работает под Windows Vista или новее, отключите UAC, в противном случае служба openpn, работающая на клиенте, не сможет установить маршруты.
Виктор,
> б. NAT исходящие пакеты из туннеля Это было полезно для меня.
FelikZ
Действительно учтите, что правило FORWARD -j ACCEPT делает Сервер открытым маршрутизатором между всеми его интерфейсами. Он не должен использоваться в производственных системах. Но для того, как это сделать в принципе быстро, очень хороший набор инструкций.
Sprinterfreak
Есть ли Redirect all the traffic into the tunnelшаг в конфигурации клиента?
самолет