Совместное использование OpenVPN для указанного IP-диапазона в локальной сети


1

Возможно ли и как поделиться OpenVPN (в настоящее время Anonine) -соединением с указанными IP-адресами в локальной сети? Локальная локальная сеть состоит из компьютеров под управлением ОС Windows и Linux и устройств Android

Текущая настройка, сервер с дистрибутивом Ubuntu Server:

  • eth0: публичный ip (dhcp, скажем, 112.112.112.112), общий для локальной сети с iptables
  • eth1: локальная локальная сеть (192.168.1.1)
  • tap0: OpenVPN (Anonine DHCP 221.221.221.221) с опцией конфигурации route-nopull

На данный момент я делю общедоступный IP-адрес для локальной сети с помощью iptables:

iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Чего я хотел бы добиться, так это подключить интернет-соединение eth0 к локальной сети с IP-адресами 192.168.1.2 - 192.168.1.19, и они отказались использовать OpenVPN -соединение tap0.

Затем я хотел бы поделиться OpenVPN-соединением с ip-адресами больше 192.168.1.19, и они отказались использовать eth0 любой ценой.

Я буду вручную добавлять серверы имен на каждом клиенте в локальной сети.

- ПОСЛЕ ЧАСОВ ПОПЫТКИ -

Таблица маршрутов, когда route-nopull используется с OpenVPN:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         88.115.14.1     0.0.0.0         UG    0      0        0 eth0
88.115.14.0     *               255.255.224.0   U     0      0        0 eth0
localnet        *               255.255.255.0   U     0      0        0 eth1

И эта маршрутизация используется, когда OpenVPN добавляет маршруты:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         46.246.18.101   128.0.0.0       UG    0      0        0 tap0
0.0.0.0         88.115.14.1     0.0.0.0         UG    0      0        0 eth0
46.246.18.100   0.0.0.0         255.255.255.128 U     0      0        0 tap0
80.67.8.213     88.115.14.1     255.255.255.255 UGH   0      0        0 eth0
88.115.14.0     0.0.0.0         255.255.224.0   U     0      0        0 eth0
128.0.0.0       46.246.18.129   128.0.0.0       UG    0      0        0 tap0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

Это то, что я использовал для предоставления общего IP-адреса (WAN) локальной сети:

iptables -A FORWARD -o eth0 -i eth1 -m iprange --src-range 192.168.1.2-192.168.1.19 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m iprange --src-range 192.168.1.2-192.168.1.19 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.1.2-192.168.1.19 -o eth0 -j MASQUERADE

Это для того, чтобы попытаться поделиться OpenVPN для локальной сети

iptables -A FORWARD -o tap0 -i eth1 -m iprange --src-range 192.168.1.20-192.168.1.254 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m iprange --src-range 192.168.1.20-192.168.1.254 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.1.20-192.168.1.254 -o tap0 -j MASQUERADE

Приведенная выше iptables работает для части общего доступа eth0, когда no-route используется для OpenVPN, но не работает для tap0. Если я разрешаю маршруты по умолчанию для OpenVPN, то он работает для tap0, но не для eth0.

Теперь вопрос в том, как мне нужно изменить таблицы маршрутизации на сервере Ubuntu, чтобы это работало? Или мне нужно изменить таблицы маршрутизации для клиентов?

Ответы:


0

Да, это не сложно, просто какая-то работа. Вы должны будете настроить свой Ubuntu PC как маршрутизатор, по всему Интернету есть миллиард руководств.

Есть несколько хитростей:

1) не устанавливайте сервер DHCP / dnsmasq, в этом нет необходимости: он уже есть в сети

2) большинство гидов скажут вам:

у вас есть два интерфейса Ethernet, eth0 подключен к WAN, eth1 подключен к LAN

Это правильно, но для маршрутизации других ПК через VPN вы должен замените tap0 / tun0 (в зависимости от того, что вы используете) на eth0, интерфейс в глобальной сети.

Обратите внимание: вы можете достичь той же функциональности даже с одной сетевой картой (я сказал выше, что вам нужно две интерфейсы , а не две карты), но если у вас есть только одна карта, вам придется научиться использовать и настраивать ПНП = Виртуальные интерфейсы. В этом случае у вас будет ПК, соединяющийся с вами через интерфейс eth0: 1, и ваш компьютер перенаправит это сообщение на интерфейс tap0. Это прекрасно работает, не волнуйтесь, это просто сокращает вашу пропускную способность в два раза в часы пик.

3) Вам придется изменить IP-адрес маршрутизатора по умолчанию на всех компьютерах, для которых вы хотите, чтобы это работало, один за другим. Если вы сделаете это через маршрутизатор, IP-адрес Ubuntu будет также передан на ПК, для которых вы делаете не хотите запустить этот сервис.

4) вы можете легко заблокировать некоторые устройства, используя iptables для отказа в подключении с определенных IP-адресов.

Это некоторый объем работы, и его нелегко масштабировать. Лучшее решение - получить маршрутизатор с программным обеспечением DD-WRT / OpenWRT / Tomato (вы можете купить несколько моделей с предварительно установленным DD-WRT или самостоятельно обновить существующий), настроить VLAN и предоставить Клиент OpenVPN сервис только для членов VLAN1.

Редактировать:

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

 iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -o tap0 -m conntrack --ctstate NEW -j ACCEPT
 iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

Я пытался использовать Google столько, сколько я могу, прежде чем отправлять вопрос здесь :) Моя Ubuntu уже "маршрутизатор", разделяющий подключение eht0 к локальной сети. Я не использую dhcp / dnsmasq и у меня есть eth0 для WAN и eth1 для LAN и tap0 для соединения openvpn.
AnttiQ

@AnttiQ Смотрите мои изменения
MariusMatutiae

Я добавил тестирование на свой вопрос. Это не работает, как вы редактировали напрямую. Это нужно что-то еще, и я предполагаю, что это таблица маршрутизации.
AnttiQ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.