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