Port MySQL 3306 na VPS nie jest widoczny ze zdalnego

0

Nowicjusz tutaj, migrując moją witrynę z hosta współdzielonego do hosta wirtualnego opartego na nazwie na nowym wirtualnym serwerze prywatnym (Linode) z systemem Ubuntu 16.04. Apache działa. Zainstalowałem MySQL i utworzyłem pustą bazę danych. Nie mam jeszcze zapory ogniowej; iptables pokazuje puste listy.

Stworzyłem użytkownika MySQL o nazwie „jk” z dostępem z dowolnego miejsca. Możesz to zobaczyć w wyniku tego zapytania:

   mysql> select host, user from mysql.user;
   +-----------+------------------+
   | host      | user             |
   +-----------+------------------+
   | %         | jk               |
   | localhost | debian-sys-maint |
   | localhost | mysql.sys        |
   | localhost | root             |
   +-----------+------------------+
   4 rows in set (0.00 sec)

a „netstat” mówi, że port 3306 nasłuchuje z dowolnego miejsca (patrz pierwszy wynik):

  jk@bird:~$ netstat -an
  Active Internet connections (servers and established)
  Proto Recv-Q  Send-Q  Local Address      Foreign Address     State      
  tcp        0       0  127.0.0.1:3306     0.0.0.0:*           LISTEN     
  tcp        0       0  0.0.0.0:22         0.0.0.0:*           LISTEN     
  tcp        0     244  45.56.81.181:22    24.4.251.228:58915  ESTABLISHED
  tcp6       0       0  :::80              :::*                LISTEN     
  tcp6       0       0  :::22              :::*                LISTEN 

Wszystko wygląda dobrze na Linode (dla mnie nowicjusz).

Ale nie tak dobrze, gdy próbuję połączyć się z nim z komputera Mac. Ponieważ DNS nadal wskazuje mój stary udostępniony host, określam mój serwer Linode na podstawie jego numerycznego adresu IPv4. Gdy poproszę funkcję skanowania portów w narzędziu sieciowym macOS o skanowanie w poszukiwaniu portu 3306 na moim serwerze Linode, nic nie znajdzie. Aby sprawdzić, czy używam tego narzędzia poprawnie, przeskanowałem porty 22 i 80 i okazało się, że są one otwarte zgodnie z oczekiwaniami. Podobnie mówi, że port 3306 jest otwarty na moim starym współdzielonym hoście.

Aplikacja klienta MySQL (Sequel Pro) na moim komputerze Mac potwierdza problem:

  MySQL said: Can't connect to MySQL server on ‘45.56.81.181’ (61)

Co może być nie tak?

Jerry Krinock
źródło

Odpowiedzi:

1

Źle odczytujesz wynik netstat.

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

Port jest ograniczony tylko do użytku przez localhost (komunikacja międzyprocesowa).

W przypadku słuchacza „Adres lokalny” oznacza adres, na którym nasłuchuje. ponieważ jedynym komputerem, który może połączyć się z 127.0.0.1, jest host lokalny, nikt inny nie może połączyć się z portem. Jeśli „adres lokalny” to 0.0.0.0 lub 45.56.81.181, to nasłuchiwanie jest powiązane z dowolnym adresem odpowiednio w dowolnym winie lub adresie LAN.

Adres obcy ma zawsze wartość 0.0.0.0:* dla portów SŁUCHAJĄCYCH (ponieważ w odbiorniku nie ma innej osoby). Adres zagraniczny jest ważny tylko dla istniejących połączeń (w których państwo nie jest „LISTEN”).

W konfiguracji mysql będziesz musiał skonfigurować go tak, aby nasłuchiwał na wszystkich interfejsach (0.0.0.0) lub na interfejsie LAN.

Zobacz tutaj dokumentację dotyczącą konfiguracji MySQL do dostępu do sieci: http://dev.mysql.com/doc/refman/5.7/en/server-options.html

Frank Thomas
źródło
Dziękuję @Frank Thomas. Dodałem więc następujące dwa wiersze do mojego pliku mysql.cnf: [mysqld] bind-address=0.0.0.0 a teraz netstat pokazuje „Adres lokalny” jako 0 0.0.0.0:3306, a teraz na moim komputerze Mac znajduje się port 3306, zgodnie z potrzebą.
Jerry Krinock,
Powinienem chyba zauważyć, że ujawnienie portu MySQL na serwerze hostowanym publicznie jest bardzo niepewną konfiguracją. być może lepszym rozwiązaniem jest przywrócenie go do lokalnych powiązań i użycie tuneli SSH w celu uzyskania dostępu do mysqld lub myPHPAdmin lub cokolwiek, czego używasz. blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html
Frank Thomas