LINUX.ORG.RU
ФорумAdmin

перенаправление всего траффика в openvpn

 ,


0

1

всем привет. есть шлюз с двумя физ сетевыми картами и третья виртуальная карта. eth0 - провайдер eth1 - внутренняя сеть tun0 - сеть которую получает шлюз подключаясь к openvpn серверу. tun0 в ifconfig есть соответственно только тогда, когда шлюз подключен к opvpn серверу. задача сделать так, что бы юзеры сидяшие во внутренней сети eth1 пользовались интернетом tun0, т.е. что бы инет у них всегда был по openvpn.

на сейчас на шлюзе стоит dhcp+squid3 прозрачный opvnp сервер где то за бугром, там ufw.

заранее отвечаю на вопросы: да, так надо. нет на каждом клиенте подключить opvpn client не проще и т.д.


я так понимаю надо прописывать route add, но как я не пытался, все равно, при поднятии vpn соединения , клиенты могут пинговать только tun0, а сам гейт впна 10.8.0.1 они не видят, да и инет перестает работать:)

bidjo ()

NAT на шлюзе есть? iptables-save покажи. Заодно также таблицу маршрутизации при поднятом впн

Deleted ()
Ответ на: комментарий от Deleted

nat есть. вот его правила:
#!/bin/sh

#форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

#траффик на lo
iptables -A INPUT -i lo -j ACCEPT

#доступ из внутри в наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

#NATUP
iptables -t nat -A POSTROUTING -o eth0 -s 10.200.100.0/24 -j MASQUERADE

#ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Запрет доступ снаружи во внутрь
iptables -A FORWARD -i eth0 -o eth1 -j REJECT

# Заворот http на прокси
iptables -t nat -A PREROUTING -i eth1 ! -d 10.200.100.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 10.200.100.50:3128


iptables:
# Generated by iptables-save v1.4.12 on Sun May 6 21:57:51 2018
*nat
:PREROUTING ACCEPT [3117:572014]
:INPUT ACCEPT [1375:93508]
:OUTPUT ACCEPT [991:67778]
:POSTROUTING ACCEPT [1144:93680]
-A PREROUTING ! -d 10.200.100.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.200.100.50:3128
-A PREROUTING ! -d 10.200.100.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.200.100.50:3128
-A POSTROUTING -s 10.200.100.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.200.100.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun May 6 21:57:51 2018
# Generated by iptables-save v1.4.12 on Sun May 6 21:57:51 2018
*filter
:INPUT ACCEPT [13741:2672965]
:FORWARD ACCEPT [652:139687]
:OUTPUT ACCEPT [10985:2688436]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Sun May 6 21:57:51 2018

таблица маршрутизации без ВПН:

default via 177.255.216.12 dev eth0 metric 100
10.200.100.0/24 dev eth1 proto kernel scope link src 10.200.100.50
177.255.216.0/24 dev eth0 proto kernel scope link src 177.255.216.21
XXX.XXX.XXX.243 via 177.255.216.12 dev eth0

таблица маршрутизации с ВПН:
0.0.0.0/1 via 10.8.0.5 dev tun0
default via 177.255.216.12 dev eth0 metric 100
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
10.200.100.0/24 dev eth1 proto kernel scope link src 10.200.100.50
128.0.0.0/1 via 10.8.0.5 dev tun0
177.255.216.0/24 dev eth0 proto kernel scope link src 177.255.216.21
XXX.XXX.XXX.243 via 177.255.216.12 dev eth0

еще когда подключение по opvpn просиходит, мне консоль говорит: ERROR: Linux route add command failed: external programm exited with error status: 7

что бы не было путанницы: 10.200.100.0 это внутренняя подсеть, 177.255.216.0 это внешняя подсеть, до момента пока не получится завести как надо впн и тогда шлюз будет на сетке провайдера.
10.8.0.0 это сеть впна

bidjo ()
Ответ на: комментарий от bidjo

На форуме можно использовать тег [code][/code], с ним форматирование легче и красивее выходит.

В правила надо добавить это:

iptables -t nat -A POSTROUTING -o tun+ -s 10.200.100.0/24 -j MASQUERADE
iptables -A FORWARD -i eth1 -o tun+ -j ACCEPT

Еще советую в начало скрипта добавить очистку уже имеющихся правил:

iptables -F
iptables -t nat -F

Deleted ()
Ответ на: комментарий от bidjo

В этом случае можно и в конец. А вообще, правила проходятся последовательно, так что надо ставить в правильной очередности.

Deleted ()
Ответ на: комментарий от bidjo

tun+ - это все интерфейсы, имена которых начинаются с tun

Deleted ()
Ответ на: комментарий от bidjo

Я про то, что каждый пакет поочередно «проходит» по каждому правилу, так что если ты сначала поставил -A FORWARD -j DROP, а потом разрешил какой-то трафик, то этот трафик все равно проходить не будет.

Поставь в конец, с текущими правилами это сработает.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

круто круто. спасибо большое. работает:) а еще вопрос на последок. при падении внп коннекта, мои маршруты начинают ходить по старинке напрямую в интернет. а как их редиректить на заглушку, если впн падает?

bidjo ()
Ответ на: комментарий от bidjo

Удали default route через интерфейс eth? (что у тебя там в мир смотрит) и добавь маршрут через этот eth? (не забудь указать gateway) до IP VPNа.

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

смотрит в мир eth0
ip route:

default via 177.255.216.12 dev eth0  metric 100
10.200.100.0/24 dev eth1  proto kernel  scope link  src 10.200.100.50
177.255.216.0/24 dev eth0  proto kernel  scope link  src 177.255.216.21
XX.XX.XX.243 via 177.255.216.12 dev eth0


если не ошибаюсь, мне надо сделать route delete -net default via 177.255.216.12 dev eth0 metric 100 и поставить route add -net default via 10.200.100.50 dev eth1 metric 100

чет не понял

bidjo ()
Ответ на: комментарий от bidjo

ip route del default via 177.255.216.12 dev eth0
ip route add VPN_IP via 177.255.216.12 dev eth0

После этого — подключиться к VPN, и если default route не прописался сам —

ip route add default via LOCAL_VPN_IP dev tun0

как-то так.

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

Если у тебя OpenVPN, можешь попробовать использовать мой скрипт.
Тут я ещё добавляю default route вникуда сразу после отключения от VPN, чтобы наверняка.

#!/bin/bash

device="$dev" # tun0
gateway="$route_vpn_gateway"
network="${route_network_2}/${route_netmask_2}" 

# detect action type # 
[ "x${script_type}" == "xup" ] && action="add" 
[ "x${script_type}" == "xdown" ] && action="del" 

# routing #
[ "x$action" == "xadd" ] && ip route del default 
ip route $action $network via $gateway dev $device
ip route $action default via $gateway dev $device 
[ "x$action" == "xdel" ] && ip route add default dev lo  # add invalid default gateway to prevent our clients to show white IP address
exit 0


В конфиге прописывается как

script-security 2
up <ПУТЬ_ДО_СКРИПТА>
down <ПУТЬ_ДО_СКРИПТА>


И не забыть сделать скрипт исполняемым.

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

на

ip route add XXX.XXX.XXX.243 via 177.255.216.12 dev eth0
ответ
RTNETLINK answers: File exists


на
ip route add default via 10.8.0.1 dev tun0
ответ
RTNETLINK answers: Network is unreachable


как то так. пробовал и с отключением vpna и с ним.
скрипт еще не пробовал. щас опробую

bidjo ()
Ответ на: комментарий от bidjo

RTNETLINK answers: Network is unreachable

Нужно ещё до сети 10.8.0.0 добавить маршрут через локальный IP VPN-сервера по устройству tun0.

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

со скриптов немного запутался. где что менять не понял :/
device=«$dev» # tun0 я меняю на device=«$tun0» # tun0 так ведь? # это ведь комментарий прост.

gateway=«$route_vpn_gateway» это XXX.XXX.XXX.243 или уже гейт подключенного впна, т.е. 10.8.0.1

network=«${route_network_2}/${route_netmask_2}» это как network=«${10.200.100.00}/${255.255.255.0}» или чья сеть?) у меня 3 сети получается, внешка,внутряшка,впншка.

ну и дальше тож непонятно ;/

script-security 2
up <ПУТЬ_ДО_СКРИПТА>
down <ПУТЬ_ДО_СКРИПТА>
прописывается в теле client.ovpn ?

bidjo ()
Ответ на: комментарий от bidjo

Ничего менять не нужно.
Скопировать, как есть.

прописывается в теле client.ovpn ?

Да, наверное, не знаю, где у тебя конфиги хранятся:)

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

еще вопрос в догонку, по поводу скорости. чем ограничевается скорость прогоняемой информации через впн тунель наружу?
ДЦ обещал скорость vds-а анлим 100мбс, а по факту получил 5мбс до ресурса, который расположен в той же географической области где находится ДЦ. разрываю впн и получаю 80мбс.
где непомню где, читал, что скорость впна может ограничиваться 1) типом шифрования пакетов, 2) сетевой картой, вроде как бренды вроде интелов поддерживают аппаратное шифрование, хотя пакеты же ЦПУ шифрует или не?.. хз

bidjo ()
Ответ на: комментарий от bidjo

Чем угодно зависит.
Обычно каналом от провайдера до твоего VPN-сервера.
Подними там web-сервер, создай большой файл и измерь скорость, например.

annerleen ★★★★★ ()
Ответ на: комментарий от annerleen

окей. скрипт запускать перед поднятием vpn соединения?
up <ПУТЬ_ДО_СКРИПТА> например /home/user/run.sh
down <ПУТЬ_ДО_СКРИПТА> тот же /home/user/run.sh? после down чего? tun0? excusemeidontunderstand

bidjo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.