虛擬機端口映射提供mysql遠程服務

 碰到一個運維問題,目標是需要遠程訪問mysql,花了一些時間總算搞定,聊作記錄。

 場景是遠程有一臺物理服務器WinServer2012,裏頭用VMware裝了若干臺Ubuntu 16.04虛擬機,虛擬機網絡採樣NAT方式,在虛擬機裏搭的mysql,3306端口,在虛擬機內部通過localhost或者127.0.0.1是可以訪問的,外網無法訪問。


外網要訪問虛擬機裏的mysql在3306端口的服務,需要做好三件事情:

1. 將物理主機(假定ip爲202.113.xxx.xxx)的一個端口(這裏用13306)映射到虛擬機的3306端口

2. 物理服務器和虛擬機的防火牆設置,確保物理主機的13306端口外網能訪問,確保虛擬機的3306端口能通過主機訪問。

3. mysql遠程訪問權限設置以及ip綁定修改


1. 端口映射

 在VMware中設置端口映射,首先在虛擬機裏通過ifconfig查看虛擬機在局域網中的ip,這裏我用192.168.56.133,有時候多個局域網地址不知道該用哪個,先看看VMware裏NAT的子網地址,比如這裏是192.168.56.0,那麼就選屬於這

個子網的那個ip。

 然後在虛擬網絡編輯器裏進入NAT設置窗口,添加一項端口轉發,填寫用於外網訪問的主機端口,虛擬機ip和mysql端口3306,類型選擇TCP。





2. 防火牆設置

 做完端口映射講道理現在訪問主機202.113.xxx.xxx:13306就相當於在訪問虛擬機的3306端口了,但是還要確保端口是對外開放的。查看某個ip是否可達我們可以ping一下這個地址,而查看某ip的某個端口是否可以訪問,如果在機器內檢查自己的端口服務情況就用netstat查看,也可以從外部檢驗端口,想搞事情的話可以用端口掃描工具,其實這裏用telnet就很方便。

 我們先在遠程telnet一下服務器主機13306端口,如果連接不上,一般我們服務器還是不能直接粗暴地關防火牆的,就需要去控制面板->系統和安全->Windows 防火牆->高級設置裏新建一個入站規則,選擇端口類型,允許外網連接這個端口。再在遠程telnet一下這個端口,確認可以連接。







 好了,遠程對服務器主機的13306端口telnet通了,我們再到物理主機裏用局域網ip來telnet虛擬機的3306端口看看通不通。如果不通,就需要到Ubuntu虛擬機裏修改防火牆,有幾種途徑,用iptables命令,修改iptables的配置文件以及用ufw命令。iptables命令行工具比較常用,ufw也很方便,修改iptables配置文件就麻煩一點,不同系統版本的配置文件名字和位置有些不一樣,容易暈乎。

 iptables有很多實用細節,可以參考此文,不同系統還是稍有些出入,得自己慢慢試,舉幾個我們此處用到的例子。

sudo iptables -L #查看防火牆規則列表
sudo iptables -F #清空防火牆規則
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT #設置3306外部端口可訪問

 用命令配置是即時生效的,重啓以後規則又會丟失。想要永久有效可以去修改iptables配置文件,也可以用命令

service iptables save #使iptables設置長久有效,重啓不丟失


 ufw的基本使用如下,ufw設置完一開始沒有生效,我重啓了一下虛擬機,然後就OK了。可以參考這個文章 https://www.cnblogs.com/kluan/p/5993767.html

1 啓用
 sudo ufw enable
 sudo ufw default deny 
 
作用:開啓了防火牆並隨系統啓動同時關閉所有外部對本機的訪問(本機訪問外部正常)。

2 關閉
 sudo ufw disable 
 
2 查看防火牆狀態
 sudo ufw status 

3 開啓/禁用相應端口或服務舉例
 sudo ufw allow 3306 允許外部訪問80端口
 sudo ufw delete allow 3306 禁止外部訪問80 端口
 sudo ufw allow from 192.168.1.1 允許此IP訪問所有的本機端口

3. mysql遠程訪問配置

 做完端口映射,也設置了防火牆,遠程訪問mysql還是can not connect to mysql server,那還有一件事要考慮就是mysql server的遠程訪問限制。想起當初實習的時候leader叫我看兩遍《mysql5.5中文參考手冊》,現在也沒看完一遍,藉此又翻一翻手冊,Mysql訪問權限系統那一節。我們要做的呢就是將訪問權限all一下。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;     //任何遠程主機都可以訪問數據庫
mysql> FLUSH PRIVILEGES;    //需要輸入次命令使修改生效
 此外ubuntu中mysql默認綁定的是127.0.0.1,這樣就只允許本機登錄,想要允許其他地方登錄只需要把bind改成公網ip或者任何ip均可。需要編輯配置文件mysqld.cnf,一般位置在/etc/mysql/mysql.conf.d/mysqld.cnf


到此遠程的機器就成功通過物理主機的映射端口訪問虛擬機裏的mysql服務了,

同樣的道理做web服務,ssh遠程有是一個套路。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章