Попытка соединиться с серверами в удаленной LAN с softether клиентом VPN и iptables туземным ip_forwarding

Я реализовал softether vpn сервер на одном aws сервере, подключенном к другим экземплярам в LAN. Я могу ssh в сервер с ssh myname@10.0.1.10 без проблемы. Я следовал этому руководству

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

Я добавил 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 - номер

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

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

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
задан 11 June 2015 в 15:58
2 ответа

Хорошо, продолжаем от https://superuser.com/questions/923747/vpn-ip-forwarding-and-nat/925570#925570 У меня есть что может быть действительно глупый вопрос, но если все, что вам нужно, это доступ к определенным портам, например http / https, пробовали ли вы туннелирование SSH? Это намного проще, чем настроить 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: // предназначено. 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 (скрытый) откроет терминал 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-соединение запустится без запроса пароля. В качестве функции безопасности вы можете настроить туннель-пользователя удаленно, используя / 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: //B.B.B.B: 443 .

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

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

ssh -T -RB.B.B.B:4443:C.C.C.C:443 adminuser@A.A.A.A
1
ответ дан 3 December 2019 в 12:46

Нет никакой разницы в маршрутизации, необходимой для 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 привязан только к одному конкретному адресу.

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

0
ответ дан 3 December 2019 в 12:46

Теги

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