Попытка подключения к серверам в удаленной локальной сети с помощью более мягкого VPN-клиента и iptables nat ip_forwarding

Я внедрил более мягкий сервер VPN на одном сервере AWS, подключенном к другим экземплярам в локальной сети. Я могу SSH на сервер с ssh myname@10.0.1.10 без проблем. Я следовал этому руководству

Моя цель - разрешить мне доступ к удаленным серверам aws в локальной сети с помощью ssh myname@hostname.mydomain.com или же http://hostname.domainname.com с моего ноутбука с помощью VPN. ssh сейчас работает, но я не могу понять, как получить веб-страницу. Причина, по которой я хочу получить веб-страницу через vpn, заключается в том, что веб-сайт является административным бэкендом, и я хочу ограничить доступ пользователей, приходящих с IP-адресов vpn.

я добавил net.ipv4.ip_forward = 1 чтобы sysctl и

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

route add -net 10.0.0.0/8 gw 10.0.1.10

ifconfig -a

vpn_tun0  Link encap:Ethernet  HWaddr 00:ac:a3:58:1f:78  
inet addr:10.0.1.11  Bcast:10.0.1.255  Mask:255.255.255.0
inet6 addr: fe80::2ac:a3ff:fe58:1f78/64 Scope:Link

netstat -nr

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.0.0.0       U         0 0          0 vpn_tun0
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 vpn_tun0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

на сервере в vpnserver:

DhcpTable

ID              |21
Leased at       |2015-06-08 (Mon) 08:49:46
Expires at      |2015-06-08 (Mon) 14:23:06
MAC Address     |00-AC-A3-58-1F-78
Allocated IP    |10.0.1.11
Client Host Name|Inspiron-1564

на моем ноутбуке

VPN Client>accountlist
AccountList command - Get List of VPN Connection Settings
Item                        |Value
----------------------------+----------------------------------------------------
VPN Connection Setting Name |my_connection
Status                      |Connected
VPN Server Hostname         |hostname.domainname.com:5555 (Direct TCP/IP Connection)
Virtual Hub                 |lan-internal
Virtual Network Adapter Name|tun0

2 ответа

Решение

Итак, следуя по https://superuser.com/questions/923747/vpn-ip-forwarding-and-nat/925570 меня есть вопрос, который может быть очень глупым, но если вам нужен только доступ на определенные порты, такие как http / https, вы пробовали SSH Tunneling? Это гораздо проще, чем настроить VPN. В конечном итоге вы выполняете ssh с одного компьютера на другой, а затем заставляете целевой компьютер установить прямое соединение с чем-либо и перенаправляете это соединение обратно на локальный компьютер.

Допустим, вы можете получить доступ к общедоступной (DMZ) части машины AAAA, которая, в свою очередь, может получить доступ к частной BBBB машины, и вы хотите подключиться к службе HTTPS (порт 443), и при условии, что на вашем рабочем столе уже есть служба, работающая на 443 Таким образом, вы будете иметь службу слушать локально на 4443.

   ssh -L4443:B.B.B.B:443 adminuser@A.A.A.A

Затем войдите в систему, запустите локальный браузер и перейдите по https://localhost:4443/ или, если хотите, добавьте запись в свой файл hosts, отправив 127.0.0.1 по адресу предполагается.vhost.name, а затем перейдите по адресу https://intended.vhost.name:4443/

Если вам действительно нужно VPN, то...

Можете ли вы пропинговать IP-адрес локальной и противоположной сторон туннеля со своего ноутбука? Можете ли вы пропинговать другой компьютер в сети противоположного сайта? Если вы не можете попытаться отследить его и посмотреть, получите ли вы эхо от локальных и удаленных сайтов туннеля (если нет, ваша маршрутизация неверна).

Каковы различные сетевые адреса? Вы можете попытаться указать маршрут, на какое устройство вы ожидаете отправку трафика, в противном случае он должен быть в состоянии сделать вывод.

Я перечитывал это и думал, что добавлю некоторые заметки, которые могут помочь любому, кто пытается следовать тому, что я предложил:

Чтобы получить доступ к https://intended.vhost.name:4443/ и иметь этот туннель, вам нужно добавить запись в ваш файл hosts. В Linux это / etc / hosts в Windows это c:/windows/system32/drivers/etc/hosts В любом случае вам понадобятся права администратора для сохранения файла (sudo для Linux, откройте блокнот как администратор в Windows). Затем добавьте следующую строку:-

127.0.0.1        intended.vhost.name

Еще одна вещь, которую я упомянул, это настройка на компьютере туннеля для прослушивания, который может пробить дыру в брандмауэре. Как обсуждалось ранее, запуск ssh -L4443:BBBB:443 adminuser@AAAA откроет терминал ssh на компьютере AAAA и при этом туннелирует трафик с локального (-L) порта 127.0.0.1:4443 на BBBB:443 (127.0.0.1 подразумевается). Предполагая, что ваш локальный компьютер - CCCC, и вы хотите открыть порт 4443 на этом IP, для доступа других компьютеров вы можете сделать это:-

ssh -LC.C.C.C:4443:B.B.B.B:443 adminuser@A.A.A.A

Здесь стоит отметить, что если вы добавите параметр -T, вы измените поведение ssh, чтобы открыть соединение ssl, затем туннель и не запускать терминал внутри него.

Когда я сделал это раньше, я настроил пользователя на локальном компьютере (скажем, tunneluser) и создал для него набор ключей ssh ​​в ~tunneluser/.ssh, а затем убедился, что файл ~tunneluser/.ssh/id_rsa.pub В списке, указанном на удаленных машинах ~adminuser/.ssh/authorized_keys, соединение ssh будет запущено без запроса пароля. В качестве функции безопасности вы можете настроить tunneluser удаленно, используя /bin/false в качестве оболочки (в /etc/passwd), тогда соединение не будет установлено, если вы пропустите параметр -T.

Простой способ реализовать это - включить его в скрипт в /etc/init.d, который запускается после работы в сети (обычно в rc3.d). Я хотел бы предложить уровень безопасности, хотя (избегайте запускать его как root), используя

sudo -u tunneluser "ssh -T -i/home/tunneluser/.ssh/id_rsa.pub -LC.C.C.C:4443:B.B.B.B:443 tunneluser@A.A.A.A"

Обратите внимание, что если IP-адрес, который вы хотите прослушивать (перечисленные выше: 4443), является "привилегированным портом" (т. Е. Он входит в диапазон, обычно используемый системными службами), вам потребуется запустить ssh от имени root, чтобы получить разрешение слушать там.

Любой пользователь окна должен просто получить доступ к https://c.c.c.c:4443/, и он увидит сайт, который находится по адресу https://BBBB: 443.

Если на машине в CCCC нет блокировки службы:443, используйте ее вместо: 4443, и https://CCCC будет эквивалентно https://BBBB.

Кроме того, если намерение полностью изменено, скажем, что вы находитесь на машине с доступом к CCCC, вы хотите пробить дыру в DMZ через машину AAAA, чтобы пользователи, которые могут получить доступ к BBBB, могли получить доступ к CCCC через туннель, не имея возможности чтобы получить к нему прямой доступ, вы используете -R вместо -L (и слушающий сокет находится на удаленном, а не на локальной стороне туннеля). Я включаю -T, чтобы показать, как он используется.

ssh -T -RB.B.B.B:4443:C.C.C.C:443 adminuser@A.A.A.A

Нет никакой разницы в маршрутизации, необходимой для ssh и http. Оба работают по TCP и не разыгрывают трюки с базовым IP-трафиком.

Согласно вашему вопросу оба используют одно и то же имя хоста, но вы не упомянули, разрешается ли это имя хоста только на один или несколько IP-адресов. С использованием telnet С помощью этой команды вы можете проверить, можно ли установить соединение как с портом 22, так и с портом 80 на сервере. Он также сообщит вам, по какому IP-адресу он подключается.

Из вопроса я вижу, что вы используете ваши ssh и http серверы на том же имени хоста, что и ваш VPN сервер. Это может быть проблемой. Реальная проблема здесь не столько в том, что они используют одно и то же имя хоста, сколько в том, что они используют один и тот же IP-адрес. Даже если бы вы использовали разные имена хостов, указывающие на один и тот же IP-адрес, это все равно могло быть проблемой, но тогда разные имена хостов могли бы скрыть источник проблемы.

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

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

Самое простое решение - использовать два разных IP-адреса для доступа к VPN и другим службам, расположенным на одном и том же устройстве. Обычно VPN-серверу будет назначено достаточно IP-адресов, чтобы был другой IP-адрес, который можно использовать для этой цели.

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

Вы упоминаете, что хотите ограничить доступ к службе http только пользователям, подключающимся с IP-адреса VPN. Если у вас уже есть эти фильтры, это может быть причиной. Соединение просто не проходит через VPN-соединение и поэтому блокируется фильтрами. Причина, по которой он будет работать при использовании ssh, а не http, может заключаться в том, что sshd настроен на разрешение подключений с любого IP-адреса, а не только из диапазона VPN.

Другое возможное объяснение заключается в том, что службы ssh и http не связаны с одним и тем же IP-адресом. Возможно, ssh связан с любым адресом, а http связан только с одним конкретным адресом.

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

Другие вопросы по тегам