Задать вопрос
@vitalysokolov

Почему сервер видит реальный ip вместо ip VPN?

Есть сервер-1 с openvpn-сервером; сервер-2 с apache, mongod и проч.

На компьютере запущен VPN-клиент. Проверяю свой ip через whatismyipaddress.com, либо любой другой онлайн-сервис — определяется ip-адрес сервера-1, всё ок.

Захожу на сайт, работающий на сервере-2 и смотрю лог apache. Вместо ip-адреса сервера-1 (с openvpn) определяется мой реальный ip-адрес от провайдера.

Повторяю тест с mongodb. Захожу под vpn и смотрю лог — там тоже ip-адрес от провайдера вместо ip-адреса openvpn-сервера.

Почему так? И как это вообще называется? Ip leakage? Но почему утечку видит только мой сервер, а whatismyipaddress.com, например, нет?
Собственно мне нужно было настроить правила в iptables, чтоб доступ к mongo, postgresql был разрешён только через VPN.

server.conf
port 1194

proto udp
dev tun
ca ca.crt
cert rdv-strasbourg.crt
key rdv-strasbourg.key  # This file should be kept secret

dh dh.pem

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

client-to-client

keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun

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

verb 3
explicit-exit-notify 1%


Правила iptables, касающиеся openvpn:
*nat
# :PREROUTING ACCEPT [0:0]
# :INPUT ACCEPT [0:0]
# :OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A OUTPUT -o tun+ -j ACCEPT
COMMIT


*filter
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A OUTPUT -j ACCEPT

# Openvpn
-A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT

-A INPUT -j REJECT
-A FORWARD -j REJECT

--policy INPUT DROP
--policy FORWARD DROP
--policy OUTPUT ACCEPT

COMMIT
  • Вопрос задан
  • 2782 просмотра
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
@nApoBo3
Сам по себе vpn ничего не скрывает. Скрывает или nat, или proxy. Плюс через vpn вообще не может быть доступен ваш внешний адрес, поскольку для трафика внутри туннеля адрес источника это адрес туннельного интерфейса, а не адрес вашего интернет соединения.
Скорее всего трафик до нужных вам сервисов идёт не через туннель. Смотрите трассировку.
Ответ написан
@Karpion
Я так понял, что есть два компьютера, между которыми есть VPN-соединение. Т.е. у них есть IP-адреса от провайдеров; и IP-адреса от VPN-соединения.
И с одного - идёт обращение на второй.

В простейшем случае:
  1. Если первый компьютер обращается к VPN-IP-адресу второго - то обращение идёт через VPN; источник = VPN-IP-адрес первого компьютера.
  2. Если первый компьютер обращается к провайдерскому IP-адресу второго - то обращение идёт через Интернет; источник = провайдерский IP-адрес первого компьютера; это так потому. Это так потому, что иначе - IP-пакеты, порождаемые VPN, не дойдет до второго компьютера как положено.
Разъясните фразу "Захожу на сайт, работающий на сервере-2" - буду думать дальше.

Чтобы какие-то сервисы были доступны только с VPN - проще всего блокировать их порты (сами определяйте, какие) на физическом интерфейсе. Если неясно - спрашивайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы