RouterOS - przekierowanie portów nie działa (brak dostępu do serwera z zewnątrz)


(Max Graczyk) #1

Mam Raspberry Pi i postawiony na nim ownCloud oraz router z zainstalowanym RouterOS'em 6.1. Adres IP komputerka to 192.168.x.xxx, a adres zewnętrzny to 62.233.xxx.xxx. Chcę teraz ustawić tak router, aby ownCloud był widoczny z zewnątrz właśnie pod adresem zewnętrznym. Wiadomo, że w tym wypadku należy ustawić przekierowanie portów i niestety mam z tym problem.

 

Sugerując się stroną http://wiki.mikrotik.com/wiki/Forwarding_a_port_to_an_internal_IP, wpisałem poniższą regułkę do routera:

/ip firewall nat add chain=dstnat dst-address=62.233.xxx.xxx protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.x.xxx to-ports=80

Niestety, okazuje się, że w praktyce ona nie działa. Będąc podłączony do wewnętrznej sieci i wpisując adres 62.233.xxx.xxx dochodzi do zwykłego przekierowania (adres zmienia się na 192.168.x.xxx), a próbując uzyskać dostęp z zewnątrz, wychodzi na jaw, że zewnętrzne IP nie jest w ogóle połączone z Raspberry Pi (wczytuje się po prostu strona "It works!", która była przed ustawieniem regułki).

 

Próbowałem też wpisać 3 poniższe regułki:

/ip firewall nat add chain=dstnat dst-address=62.233.xxx.xxx protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.x.xxx to-ports=80
/ip firewall nat add chain=srcnat src-address=192.168.x.xxx protocol=tcp src-port=80 action=src-nat to-addresses=192.168.x.xxx to-ports=80
/ip firewall nat add chain=srcnat src-address=192.168.x.xxx protocol=tcp src-port=80 action=masquerade

Wtedy po wpisaniu do przeglądarki adresu 62.233.xxx.xxx nie zmienia się on (czyli zamiast zwykłego przekierowania jest niby przekierowanie portów), lecz przy próbie uzyskania dostępu z zewnątrz powtarza się wcześniejsza sytuacja.

 

Bardzo mi zależy na tym, aby ownCloud był dostępny z zewnątrz, ale nie mam pojęcia, jak ten problem rozwiązać. Z tego powodu proszę was o pomoc - w jaki sposób ustawić tak przekierowanie portów, aby rzeczywiście ono działało?

Tylko prosiłbym nie odsyłać mnie do forum Mikrotika (forum.mikrotik.com), nie udało mi się uzyskać tam pomocy :frowning:


(struart) #2

Ja zrobiłem to tak :slight_smile: oczywiście inne usługa, ale zasada ta sama.

 

Co do linijki z maskaradą to ja nie ograniczam jej do portu 80 oraz do sieci 192.x.x.x tylko robię Out. Interface = ethernet z internetem i już.

Przykład:

add action=masquerade chain=srcnat comment="" disabled=no out-interface=DSL_WAN

PS. Mikrotik 4.17 więc może będzie trzeba dopasować pod 6.1

/ip firewall nat add action=dst-nat chain=dstnat comment="" disabled=no dst-address=x.x.x.x dst-port=y protocol=tcp to-addresses=z.z.z.z to-ports=q

Gdzie

x.x.x.x = ip zew

y = port na który ma to być dostępne z zewnątrz np 62.233.x.x:90

z.z.z.z = ip lokalne

q = port na którym działa usługa lokalnie

 

I już przed chwilą sprawdziłem to na przekierowaniu strony konfiguracyjnej routera klienta i poszło tak samo przekierowanie z kamer jednej klientki również na tym śmiga…

 

Na starych wersjach RouterOS trzeba było dodatkowo dodać regułkę w “drugą stronę”, ale skoro masz  6.1 to raczej nie ma już tego wymogu skoro na 4.17 działa :slight_smile:

 

Może ta Twoja usługa korzysta też z innych portów jak i protokołów? :slight_smile:

Jak masz te regułki w winboxie otwarte to w momencie próby wejścia przez zewnętrzne IP ilość bajtów przesłanych przez daną regułkę rośnie?

Przykład


(Max Graczyk) #3

Niestety, te regułki też nie działają :frowning:

Sytuacje powtarzają się (przy dostępie z wewnątrz niby wszystko w porządku, ale przy dostępie z zewnątrz okazuje się, że IP zewnętrzne nie jest połączone z komputerkiem).

 

Sprawdzałem też przesłane bajty - zwiększają się one przy dostępie z wewnątrz, ale są bez zmian przy każdej próbie dostępu z zewnątrz:

Przed wejściem z wewnątrz: http://wstaw.org/m/2014/07/11/przed.png

Po wejściu z wewnątrz: http://wstaw.org/m/2014/07/11/po1.png

Po kilku próbach wejścia z zewnątrz: http://wstaw.org/m/2014/07/11/po2.png


(roobal) #4

Mi pokazuje “It works”. Opcje są dwie: albo przekierowujesz na niewłaściwego hosta, albo ownCloud działa na innym porcie, niż 80.


(Max Graczyk) #5

Żadna z tych opcji mi nie pasuje. Na 100% ownCloud działa na porcie 80 i na pewno przekierowuję na właściwego hosta…(jak wpisuję jego IP, to się wczytuje, co trzeba)


(struart) #6

Spróbuj, ale to strzał w ciemno.

Bridge > kliknij Settings > zaznacz USE IP FIREWALL


(Max Graczyk) #7

Też nie działa - nawet, gdy zaznaczyłem dodatkowo “Use IP Firewall for VLAN” i “Use IP Firewall for PPPoE” :frowning:


(roobal) #8

Ten sam host wyświetla “It works”? Jeśli tak, pokaż konfigurację Apache (konfigurację VHost) oraz wynik polecenia.

ls -l /var/www/

(Max Graczyk) #9

Uświadomiłem sobie, że jedna ważna rzecz uciekła mi, kiedy pisałem ten temat - na Raspberry Pi jest zainstalowany Arch Linux ARM.

 

Wynik polecenia ls -l /var/www:

ls: cannot access /var/www: No such file or directory

Z tego, co mi się wydaje, na Apache mam skonfigurowane 2 vhosty - jeden główny (razem z konfiguracją Apache w /etc/httpd/conf/httpd.conf) i jeden z SSL (/etc/httpd/conf/extra/httpd-ssl.conf). ownCloud korzysta bardziej z tego drugiego (gdyż ma włączony SSL). Wrzucam treść obydwu plików:

httpd.conf: http://wklej.org/hash/752b4723e93/

httpd-ssl.conf: http://wklej.org/hash/c4e75917be7/


(struart) #10

SSL korzysta dodatkowo z portu 443.

Musisz mieć przekierowanie z 80 i 443


(Max Graczyk) #11

Nie pomyślałem zupełnie, że potrzebne jest jeszcze dodatkowe przekierowanie dla SSL…

Ale po jego ustawieniu też nie działa. Nawet jest gorzej - gdy wpisuję IP zewnętrzne w swojej sieci, to adres zmienia się na 192.168.x.xxx mimo ustawionej maskarady (zaczęło się to robić jeszcze przed dodaniem tego przekierowania) - to tak jakby ownCloud nie uznawał hosta 62.233.xxx.xxx, tylko ten lokalny :frowning:


(struart) #12

Wklej to cała IP NAT.

Ty próbujesz wejść z LANa adresem zewnetrznym? Czy cię nie zrozumiałem.

To nigdy nie zadziała.

Jak jesteś w lanie wchodzisz adresem lanowym, a jak jesteś poza lanem to zewnetrznym.

Z wewnętrznej sieci zewnętrznym adresem nie wejdziesz.


(Max Graczyk) #13

http://wstaw.org/m/2014/07/12/nat_1.png

I jeszcze jedno - ownCloud postawiony jest na dysku twardym dodatkowo podłączonym do Raspberry Pi. Kiedy jest odłączony, to wtedy na Apache stoi inna strona (nie jest to “It works!”) i maskarada DZIAŁA (tym się sugerowałem, pisząc temat). Natomiast kiedy jest podłączony, to wtedy maskarada NIE DZIAŁA - jest sytuacja, jaką opisałem w poprzednim poście. Niestety, teraz dopiero sobie to uświadomiłem…

 

@up: Tak, próbuję wejść z LAN-a adresem zewnętrznym. I wtedy wchodzi. Natomiast jak próbuję wejść z zewnątrz, to wówczas nie wchodzi. Brzmi absurdalnie, ale tak jest.


(struart) #14

Wklej mi to w postaci komend.

Terminal:

IP firewall nat export


(Max Graczyk) #15
/ip firewall nat
add action=masquerade chain=srcnat src-address=192.168.1.0/24
add action=masquerade chain=srcnat out-interface=ether1
add action=dst-nat chain=dstnat dst-address=62.233.xxx.xxx dst-port=80 \
    protocol=tcp to-addresses=192.168.x.xxx to-ports=80
add action=dst-nat chain=dstnat dst-address=62.233.xxx.xxx dst-port=443 \
    protocol=tcp to-addresses=192.168.x.xxx to-ports=443

Przy czym 62.233.xxx.xxx to mój adres zewnętrzny, a 192.168.x.xxx to adres lokalny Raspberry Pi.

 

EDIT:

Zauważyłem dziwną rzecz - podawane przeze mnie regułki NAT do przekierowania portów działają w wewnątrz na każde zewnętrzne IP, jakie wpiszę. Czyli np. jak w dst-address wpiszę 1.1.1.1 czy 2.2.2.2, to przy próbie dostępu do tych adresów przekierowuje mi do Raspberry Pi. Oczywiście na zewnątrz nic nie działa.


(struart) #16

Spróbuj jeszcze przekierować na port 81

/ip firewall nat add action=dst-nat chain=dstnat dst-address=62.233.xxx.xxx dst-port=81 \
    protocol=tcp to-addresses=192.168.x.xxx to-ports=80

I teraz spróbuj wejść przez 62.233.xxx.xxx:81


(Max Graczyk) #17

Ustawiłem tę regułkę i teraz, jak wpisuję 62.233.xxx.xxx:81, to przekierowuje do 192.168.x.xxx i się wczytuje ownCloud z tego adresu. Przy próbie dostępu z zewnątrz wczytuje się “It works!” (czyli to samo, co dla portu 80 - sprawdzałem też port 82, wtedy nic się już nie wczytuje).


(struart) #18

82 nie zadziała bo nie masz takiego przekierowania.

Czyli przy próbie otwarcia adresu 62.233.xxx.xxx:81 z zewnątrz otwiera się it works?

Czyli wychodzi na to, że ownCloud jest na innym porcie/katalogu?

Nie masz jakiegoś rewritea na serwerze czy coś bo to raczej po stronie serwera coś nie tak jest.


(Max Graczyk) #19

ownCloud siedzi na standardowym porcie 80 i 443 dla SSL, zresztą tak jest zapisane w konfiguracji Apache (którą wrzuciłem w poście #9). I w sumie możliwe, że coś jest po stronie serwera nie tak, ale co, to nie mam pojęcia. Korzystam z domyślnej konfiguracji (zmieniłem tam tylko katalog, gdzie trzymam stronę oraz adres e-mail administratora + dołożyłem parę modułów i plik httpd-ssl.conf).

 

Dla mnie dziwne jest też to, co napisałem 2 posty wcześniej - nieważne, jakie zewnętrzne IP wpiszę do tej regułki, to wczytując je wewnątrz, przekierowuje mi do 192.168.x.xxx, a tak nie powinno być.


(roobal) #20

Czyli strony trzymasz w /mnt, a nie /var/www. Napisz jeszcze gdzie masz zainstalowany ownCloud, bo widocznie Apache nie potrafi znaleźć w konfiguracji vhost.

Pokaż wyniki poniższych poleceń.

 

ls -l /mnt
whereis owncloud
netstat -lnp | egrep "(80|443)"

Pokaż jeszcze konfigurację RouterOS.

 

ip address print
interface ethernet print
ip firewall nat print

NAT tylko tłumaczy adresy, użyć ich i tak byś nie mógł, bo nie należą do Ciebie.