12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
|
||||||
1 | ||||||
Доступ из интернета к сайтам на локалке (ubuntu 14.04 LTS на vbox под управлением windows)26.10.2016, 12:53. Показов 2118. Ответов 8
Метки нет Все метки)
(
Всем привет. Есть ubuntu server 14.04 LTS который крутится на виртуалке (vbox) под управлением Windows 8, на нем стоит apache, mysql-server, php, phpmyadmin и иже с ними. Хочу сделать так, чтобы можно было вести разработку удаленно.
Целью было: открыть доступ по ssh, по ftp и собственно чтобы можно было из интернета обращаться по ip или имени и просматривать сайты. Что было сделано (вдруг кому пригодится). Я подключил статический внешний ip. Пробросил порты для подключения по ssh и ftp. Это все работает нормально. Кому интересно, логика такая - чтобы пробросить порты изначально нужно иметь статический внешний ip адресс. Его можно заказать у провайдера. Далее пробрасываем порт в настройках вашего роутера, куда можно попасть введя в адресной строке браузера 192.168.0.1 (за редким исключением может быть 192.168.1.1 или 192.168.1.10). Появится окошко куда нужно ввести логин и пароль. Чаще всего это admin/admin или admin/пусто. Если подключиться не удалось, то вам нужно просто загуглить вашу модель роутера и узнать, как подключиться. Дальше, как я уже сказал, вам нужно пробросить порты, чтобы при обращении на ваш внешний ip по определенному порту (коей вы можете придумать сами в пределах до 65535 (не считая уже занятых другими сервисами портов)) ваш роутер знал, куда перенаправить обращение. В разных моделях роутеров эти настройки могут выглядеть по разному, но чаще всего нужный пункт в меню настройки будет называться "Переадресация" или, если на английском то "Port Forwarding". Зайдя в нужный раздел вам нужно будет ввести внешний порт (чаще всего там в описании пишут, что это порт сервиса), который как я уже писал выше, вы придумываете сами, затем внутренний порт - это порт, который используется по умолчанию и указать ip ubuntu server. Тут нужно пояснить несколько моментов: 1) Для того чтобы ваш ubuntu server получал ip адреса из диапазона вашей подсети, вам нужно в настройках виртуальной машины, в настройках сети, установить тип соединения "Сетевой мост", таким образом у вас получится что несколько интерфейсов будут работать в одной подсети, таким образом ваш компьютер допустим будет иметь адрес 192.168.0.10, а юбунта сервер на виртуалке допустим получит адрес 192.198.0.100 (в таком случае этот адрес вы и укажете в настройках проброса портов). 2) Если у вас работает DHCP (проверить можно в разделе dhcp в настройках роутера все по тому же адресу 192.168.0.1), то логично что у вас все внутренние ip адреса раздаются из указанного диапазона (опять же чаще всего диапазон свободных адресов указан в настройках dhcp, в настройках роутера). Это значит, что ваш ip адресс, ровно как ip адресс вашей ubuntu server будет меняться через определенное время. И поэтому нельзя просто так взять и указать в пробросе портов адрес, который мы получили (192.168.0.100) - он просто поменяется и, вам придется опять лезть в настройки. Поэтому вам нужно сперва зафиксировать данный адресс. Для этого зайдите все в те же настройки роутера и перейдите на вкладку DHCP — Address Reservation, там вам нужно будет указать mac address вашего сетевого устройства (его можно глянуть введя в консоли юбунты ifconfig), он может выглядеть например так HWaddr 08:00:22:73:53:e9. И по мимо мака вам нужно указать ip который вы хотите зафиксировать. 3) Когда вы сделает два предыдущих шага, то есть настроите сеть для виртуалки, как сетевой мост и зафиксируете полученный юбунтой ip адрес, вы сможете пробросить порты (делается это, как я писал в самом начале) и выглядеть может примерно так: Для ssh Внешний порт (придумываете из диапазона) - 2222 Внутренний порт - 22 (стандартный порт ssh) IP - (тот, который зафиксировали) - 192.168.0.100 Для ftp Внешний порт (придумываете из диапазона) - 2121 Внутренний порт - 21 (стандартный порт ssh) IP - (тот, который зафиксировали) - 192.168.0.100 Если порт будет закрыт (проверить можно здесь https://2ip.ru/check-port/), возможно у вас включен файервол и блокирует эти порты (попробуйте отключить брандмауэр windows и антивирус). Если не поможет, перечитывайте инструкцию и на всякий случай погуглите еще по этой теме. Если все удалось, то теперь это работает так - Вы подключаетесь через ssh клиент (допустим любимый PuTTy) по проброшенному ip, указывая ваш внешний ip и новый порт, а так же логин и пароль от учетки (учетка ubuntu разумеется) под которой хотите войти: 193.100.69.15 2222 login password В обычном варианте (без переадресации) запрос отправился бы на ваш локальный компьютер (windows - 192.168.0.10), но так как у нас включена переадресация, то запрос уйдет на ubuntu server - 192.168.0.100 и вы соответственно получите доступ по ssh к своему серверу на юбунте. Для доступа по фтп не забудьте поставить на юбунту фтп сервер: sudo apt install vsftpd Подключение также идет под учеткой юбунты, через любой ftp клиент. Теперь собственно вопрос - как извне (через интернет) можно обращаясь по ip или по имени, просматривать сайты, которые крутятся на apache, на ubuntu? Если тупо пробрасывать порт, допустим 8080, на юбунту, то собственно мы просто будем попадать на страницу apache, что логично. А вот как сделать чтобы можно было просматривать конкретный сайт на локалке, так, как если бы я это делал из локальной сети, а не через интернет? Ведь сайт там не один: samba/public_html/biosvyaz samba/public_html/asm Ну и так далее. На локалке это реализовано так - Для каждого сайта создан свой конфиг в apache2/sites-available, например:
127.0.0.1 asm.local 127.0.0.1 www.asm.local ... Тут 127.0.0.1 это адресс лупбэк (обратной петли или localhost иначе) А на винде в C:\windows\system32\drivers\etc\hosts указываем сопоставление доменных имен с ip адресом ubuntu: 192.168.0.100 asm.local 192.168.0.100 www.asm.local ... Получается, что при обращении по стандартному порту через браузер к доменному имени asm.local, запрос перенаправляется на адрес 192.168.0.100, там перенаправляется на локалхост, где apache уже сопоставляет доменное имя с нужной директорией и показывает нам сайт. Тут все логично. Но я не понимаю, как такое реализовать при обращении через интернет, а не из локалки. Как я уже сказал если просто пробросить порт, допустим 8888, то мы будем элементарно попадать на страницу apache, крутящегося на юбунте, потому что мы не можем просто взять и написать (вне локалки) asm.local:8888. Я читал, что можно как-то через openSSH это сделать, но там все слишком размыто. Пишут типа, введите такие-то конфиги, сделайте алиас типа имя_домена => ip и прочее. Что за алиса, где его сделать, какие конфиги, где это все писать и как? Я знаю алиасы для команд в юбунте, но это же не то. А уж про конфиги openSSH я вообще ни слухом ни духом ибо не пользовался им. Объясните, реально ли сделать то, что я хочу, чтобы я мог просматривать сайты, висящие на локалке из интернета, так, как будто они залиты на хостинг? Как это сделать? Куда и что писать?
0
|
|
26.10.2016, 12:53 | |
Ответы с готовыми решениями:
8
Удаленый рабочий стол из windows к xubuntu (ubuntu 16.04 lts) по локалке доступ к локалке из интернета ?! Не компилирует под Ubuntu 18.04 LTS Тупит NetBeans 8.0.2. под UBUNTU 14.04 LTS |
Native x86
![]() 5176 / 3022 / 875
Регистрация: 13.02.2013
Сообщений: 9,635
|
|
26.10.2016, 13:20 | 2 |
Это почему же? Если asm.local через тот же файл hosts привязан к внешнему IP, то все будет ровно так же, как и в локалке.
Любой web-сервер (apache и иже с ним) различает запрашиваемые сайты по HTTP-заголовку Host, который в свою очередь состоит из первой части адресной строки браузера (домена). Если заходить по IP-адресу, то это поле не будет нести информации о запрашиваемом сайте, поэтому выдается страница по-умолчанию (это, кстати не обязательно заглушка, можно настроить чтобы отдавался один из сайтов).
0
|
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
|
|
26.10.2016, 16:18 [ТС] | 3 |
Я именно так и предполагал.
Просто по факту (с рабочей переадресацией) получается такая цепочка обращений: 193.238.59.223:8785 (внешний ip c проброшеным портом) => 192.168.0.100 => 127.0.0.1 (лупбэк на юбунте) => default (апаче просто открывает дефолтную страницу ибо ему явно не указано имя домена). Если я вас правильно понял, вы говорите, что можно написать asm.local:8888 (вне сети) и при условии, что в файле hosts будет прописано 193.238.50.232 (внешний ip) asm.local то я такой запрос пройдет? Но как? Ведь при обращении в сети интернет запрос сначала пойдет всем инстанциям, спрашивая у всех DNS - кто знает кто такой asm.local. Если бы это было реальное доменное имя, то понятно, при регистрации домена и привязке его к хостингу, ему дается сопоставление ip адрес - имя, то есть получается, что при обращении проверяются все DNS сервера, там ищется нужное имя, в плоть до первого уровня, и если найдено то возвращается ip. У меня же нет никакого DNS, имя нигде не зарегистрировано. С теоретической точки зрения такой запрос не возможен. Возможно вы хотели указать, но то, что я не прав, что говорю, что нельзя обратиться по внешнему адресу. Но я имел ввиду, что такое обращение бессмысленно, потому что при обращении по внешнему адресу с каким-то заданным портом мы попадем, допустим на наш юбунта сервер (если настроем перенаправление), но при этом в http заголовке не будет передано имя. Нужно, как вариант, регистрироваться на free dns сервере и создавать там записи, чтобы в инете были известны наши имена. Потом запрос уже будет по доменному имени мне возвращать ip (мой внешний), туда в заголовке будет слаться доменное имя, затем на роутере будет сделано перенаправление на юбунту, и там уже апачи получит имя и по нему поймет, какой сайт отдать. Добавлено через 2 минуты Или возможно вы имели в виду, создание на каждом удаленном компьютере в файле hosts записей с сопоставлнием моего внешнего ip с именем) Но это точно не вариант) Добавлено через 1 час 17 минут Еще к тому же и имя нужно доменное регистрировать)
0
|
Native x86
![]() 5176 / 3022 / 875
Регистрация: 13.02.2013
Сообщений: 9,635
|
|
26.10.2016, 19:19 | 4 |
Первым делом компьютер посмотрит на свой hosts-файл. Если имя есть там, то больше ничего он проверять не будет и возьмет адрес из файла.
Именно это я и имел в виду. Если хотите глобальной видимости, используйте доменное имя. В его A-запись пропишите 193.238.50.232 и получите то, что ожидаете. Если так боитесь домена, то разделите свои сайты по портам. Пусть один будет на 193.238.50.232:8888, второй на 193.238.50.232:8889, третий на 193.238.50.232:8890. Это тоже можно настроить штатными средствами.
0
|
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
|
|
26.10.2016, 21:00 [ТС] | 5 |
Вариант с редактированием hosts файла не подходит, поэтому я не думал в этом направлении. А вот на счёт портов не понял (возможно из-за не достаточного знания) apache. Объясни подробней. По идее изначально проброс всех портов должен идти на один ip. Ибо сервер один. И уже на сервере апачей определяет по имени, что показывать. А как без имени сделать?
0
|
Native x86
![]() 5176 / 3022 / 875
Регистрация: 13.02.2013
Сообщений: 9,635
|
|
26.10.2016, 23:20 | 6 |
![]() Решение
Каждый порт внешнего сетевого интрфейса пробрасывается на отдельную пару локальный_IP:порт. Это значит, что разные порты внешнего адеса могуть быть замаплены как на разные внутренние адреса, так и на разные порты одного и того же внутреннего адреса. В свою очередь apache умеет прослушивать сразу несколько рзных портов и иметь на каждом из них отдельный сайт по умолчанию (который открывается при заходе по IP).
1
|
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
|
|
26.10.2016, 23:29 [ТС] | 7 |
О, это же отлично) Что апачи умеет прослушивать разные порты для одного ip я знал. Но мне в голову, что-то не пришло, что можно пробросить один порт внешнего ip на внутренний ip с разными портами) Спасибо за совет. Протестирую перед сном)
0
|
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
|
|
26.10.2016, 23:50 [ТС] | 9 |
Это я уже криво написал. Я так и делаю сейчас.
0
|
26.10.2016, 23:50 | |
Помогаю со студенческими работами здесь
9
Как заблокировать доступ к сайтам на Ubuntu? Не компилирует monogame под Ubuntu 18.04 LTS x64
Доступ к Apache из интернета. Ubuntu Доступ к виртуальному серверу Ubuntu из интернета Соединить в сеть ПК под управлением Windows XP и Windows 7 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |