News:

Теория- это когда ты знаешь все, но ничего не работает. Практика - это когда все работает, но никто не знает почему.

Main Menu

Пропадает интернет при VPN подключении

Started by skilful, 13 April 2020, 09:26

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

skilful

Здравствуйте.

Сделал настройку сервера по инструкции из статьи
https://interface31.ru/tech_it/2019/10/nastroyka-openvpn-servera-dlya-dostupa-v-internet.html


При подключении к VPN серверу клиентов подключается, но пропадает интернет у клиентов.



Моя конфигурация Ubuntu сервера:

1) netplan


network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      addresses: [ 62.113.113.59/24 ]
      gateway4: 62.113.113.1 
      nameservers:
          addresses:
              - "8.8.8.8"


2) создал файл iptables.up.v4.rules и запустил его

#!/bin/sh

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

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i ens3 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN
iptables -A INPUT -i ens3 -p udp --dport 1194 -j ACCEPT

#Запрещаем входящие извне
iptables -A INPUT -i ens3 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i ens3 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens3 -o tun0 -j DROP

# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o ens3 -s 10.88.0.0/24 -j MASQUERADE


3) После этого сохранил полученные правила через iptables-save в файле /etc/iptables.rules
в папке /etc/ip.tables.rules
# Generated by iptables-save v1.6.1 on Wed Apr  1 17:13:20 2020
*nat
:PREROUTING ACCEPT [65:3317]
:INPUT ACCEPT [5:304]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.88.0.0/24 -o ens3 -j MASQUERADE
COMMIT
# Completed on Wed Apr  1 17:13:20 2020
# Generated by iptables-save v1.6.1 on Wed Apr  1 17:13:20 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [145:21021]
-A INPUT -i ens3 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ens3 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i ens3 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i ens3 -j DROP
-A FORWARD -i ens3 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens3 -o tun0 -j DROP
COMMIT
# Completed on Wed Apr  1 17:13:20 2020



4) Затем эти правила добавил в автозагрузку

iptables
в папку if-pre-up.d добавил файл iptables с содержимым

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules



5) Конфигурация OpenVPN сервера имеет вид


;local a.b.c.d

port 1194

;proto tcp
proto udp

;dev tap
dev tun

;dev-node MyTap

ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret

dh keys/dh2048.pem

topology subnet

server 10.88.0.0 255.255.255.0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

;server-bridge

;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

;client-config-dir ccd
;route 192.168.40.128 255.255.255.248

;client-config-dir ccd
;route 10.9.0.0 255.255.255.252

;learn-address ./script

push "redirect-gateway def1"
push "remote-gateway 10.88.0.1"

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

client-to-client

;duplicate-cn

keepalive 10 120

#tls-auth ta.key 0 # This file is secret

#ncp-disable
auth SHA256
cipher AES-256-CBC


#compress lz4-v2
#push "compress lz4-v2"

#comp-lzo

;max-clients 100

#user nobody
#group nogroup

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log

log         /var/log/openvpn/openvpn.log
;log-append  /var/log/openvpn/openvpn.log

verb 4

;mute 20
explicit-exit-notify 1



6) Конфигурация OpenVPN клиента


client

;dev tap
dev tun

redirect-gateway def1

;dev-node MyTap

;proto tcp
proto udp

remote 62.113.113.59 1194
;remote my-server-2 1194

;remote-random

resolv-retry infinite

nobind

;user nobody
;group nogroup

persist-key
persist-tun

;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

;mute-replay-warnings

ca C:\\OpenVPN\\keys\\ca.crt
cert C:\\OpenVPN\\keys\\client1.crt
key C:\\OpenVPN\\keys\\client1.key

remote-cert-tls server

#tls-auth ta.key 1

auth SHA256
cipher AES-256-CBC

#comp-lzo

verb 4

;mute 20



7) Пинг до сервера 10.88.0.1 идет. Между клиентами есть пинг, но интернет на них пропадает


8.) Трассировка от клиента ко внешнему IP сервера

Трассировка маршрута к 62.113.113.59 с максимальным числом прыжков 30
1 1 ms <1 мс <1 мс 10.115.21.1
2 <1 мс <1 мс <1 мс 10.115.6.2
3 1 ms <1 мс <1 мс 91.233.223.19
4 1 ms <1 мс <1 мс 10.20.4.49
5 <1 мс <1 мс <1 мс 91.233.223.218


и т.д.


9) Маршруты у клиента OpenVPN


Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 10.115.21.1 10.115.21.180 20
0.0.0.0 128.0.0.0 10.88.0.1 10.88.0.3 266
10.88.0.0 255.255.255.0 On-link 10.88.0.3 266


и т.д.



Почему может не работать интернет у клиентов при подключении по VPN ?
Спасибо

skilful

Вроде как все заработало



Quote#!/bin/sh

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

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i ens3 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN
iptables -A INPUT -i ens3 -p udp --dport 1194 -j ACCEPT

#Запрещаем входящие извне
iptables -A INPUT -i ens3 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i ens3 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens3 -o tun0 -j DROP



iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT


# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o ens3 -s 10.88.0.0/24 -j MASQUERADE









Уваров А.С.

В конфигурации сервера уберите:

push "remote-gateway 10.88.0.1"
И раскомментируйте:

user nobody
group nogroup

Из клиента уберите:

redirect-gateway def1
Вы все равно передаете его с сервера.

iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT
Это правило-пустышка, потому как действие по умолчанию и так ACCEPT, а явного запрета для передачи исходящего трафика по цепочке FORWARD нет.

skilful

Quote from: Уваров А.С. on 13 April 2020, 18:52В конфигурации сервера уберите:

push "remote-gateway 10.88.0.1"
И раскомментируйте:

user nobody
group nogroup

Из клиента уберите:

redirect-gateway def1
Вы все равно передаете его с сервера.



Да - это пробовал разные способы. Забыл удалить. Спасибо




Quoteiptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT
Это правило-пустышка, потому как действие по умолчанию и так ACCEPT, а явного запрета для передачи исходящего трафика по цепочке FORWARD нет.



Очищаю все правила и пока не сделаю то, что выделил жирным - не работает интернет.
iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT

Нашел эту строку iptables тут

https://saribzhanov.ru/tehno/esli-ne-rabotaet-internet-s-podklyuchennyim-openvpn/



#!/bin/sh

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

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i ens3 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN
iptables -A INPUT -i ens3 -p udp --dport 1194 -j ACCEPT

#Запрещаем входящие извне
iptables -A INPUT -i ens3 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i ens3 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens3 -o tun0 -j DROP



iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT


# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o ens3 -s 10.88.0.0/24 -j MASQUERAD





Уваров А.С.

Quote from: skilful on 14 April 2020, 09:24Очищаю все правила и пока не сделаю то, что выделил жирным - не работает интернет.

Если следовать тому набору правил, что вы привели, то это пустышка, есть мнение, что приведенная вами конфигурация iptables не соответствует действительности.

skilful

Понял в чем проблема была.

В вашем скрипте из статьи в самом начале идет включение форвардинга пакетов.

У вас в статье для этого написано в /etc/openvpn/server.conf в конце добавить

up /etc/nat

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

Для этого загуглил как сохранять правила iptables в автозагрузке.
На некоторых форумах написали с помощью команды iptables-save сохраняем в файл. А потом эти правила грузим с помощью скрипта из папки if-pre-up.d

И оно все грузится для iptables, но затерялась первая строка, которая включает форвардинг пакетов ((

Разобрался. Спасибо.




P.S. в /etc/nework/if-pre-up.d/iptables написал:

#!/bin/sh

cd /etc/
./iptables.up.v4.rules



Содержимое файла iptables.up.v4.rules


#!/bin/sh

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

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i ens3 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i ens3 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN
iptables -A INPUT -i ens3 -p udp --dport 1194 -j ACCEPT

#Запрещаем входящие извне
iptables -A INPUT -i ens3 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i ens3 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens3 -o tun0 -j DROP

iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT

# Включаем маскарадинг для локальной сети
iptables -t nat -A POSTROUTING -o ens3 -s 10.88.0.0/24 -j MASQUERADE







Возникает у меня вопрос еще вот какой. Сейчас повсеместно в мануалах используют ufw.
И используются iptables-save, iptables-restore.


При этом после iptables-save правила упорядочиваются и выглядят компактно.

Как лучше действовать по старинке или на новый лад?

Уваров А.С.

В данном случае правила должны загружаться после поднятия туннеля, поэтому и поднимаются они из конфига OpenVPN.

А вообще как действовать не имеет никакого значения, iptables-save и iptables-restore ничего с правилами не делают, просто выводят их в другом порядке.

Что касается UFW - это всего лишь настройка над iptables, использовать ее можно, но лучше все-таки немного разобраться в iptables.

С другой стороны это и есть сильные стороны Linux, каждый может действовать так, как ему нравится, нет единственно верного способа, каждый волен идти своим путем.

Но в ваших правилах самое интересное - это:

iptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT
Логически оно не имеет смысла, поэтому покажите вывод:

iptables -L -vn
iptables -t nat -L -vn

skilful

Quoteiptables -A FORWARD -s 10.88.0.0/24 -o ens3 -j ACCEPT


Логически оно не имеет смысла, поэтому покажите вывод:


Все работает и без него. Проверил.
Ваша инструкция полностью работоспособна