iT邦幫忙

0

在 Synology Nas 上使用 MariaDB 時的外網存取問題

  • 分享至 

  • xImage

小弟最近想利用感測器搭配樹莓派,在戶外監測實時數據並回傳到家中的 NAS 資料庫中。

參考了許多網路上的資料後,我已經能在內網中存取資料庫並執行許多操作,以下是一個最簡潔有力的測試程式:

import mysql.connector
from mysql.connector import Error

try:
    # 連接 MySQL/MariaDB 資料庫
    connection = mysql.connector.connect(host='192......',
                                         port="3307",
                                         user='......',
                                         password='......')  # 密碼

    if connection.is_connected():

        # 顯示資料庫版本
        db_Info = connection.get_server_info()
        print("資料庫版本:", db_Info)

        # 顯示目前使用的資料庫
        cursor = connection.cursor()
        cursor.execute("SELECT DATABASE();")
        record = cursor.fetchone()
        print("目前使用的資料庫:", record)

except Error as e:
    print("資料庫連接失敗:", e)

finally:
    if (connection.is_connected()):
        cursor.close()
        connection.close()
        print("資料庫連線已關閉")

在內網中可以正確執行

資料庫版本: 5.5.5-10.3.32-MariaDB
目前使用的資料庫: (None,)
資料庫連線已關閉

在外網則會逾時無法連接資料庫

資料庫連接失敗: 2003: Can't connect to MySQL server on '192......:3307' (60 Operation timed out)

目前已經爬文,試過在 /var/packages/MariaDB10/etc 裡新增 my.cnf 檔案

[mysqld]
bind-address=0.0.0.0
skip_networking=0

資料庫的存取權限也完全打開
https://ithelp.ithome.com.tw/upload/images/20230130/20126084hrwdkDA5K3.jpg

同時將防火牆設定為允許3307連接埠的操作
https://ithelp.ithome.com.tw/upload/images/20230130/20126084rh8PBtk55b.png

但四處爬文打滾了好幾個禮拜後還是沒有新進展,希望大神們能給小弟一些指點,找出問題出在哪.../images/emoticon/emoticon06.gif

看更多先前的討論...收起先前的討論...
提示您:192是內網IP,在外網是不認識它的。
froce iT邦大師 1 級 ‧ 2023-01-30 21:41:32 檢舉
我看到那個權限圖,加上直接開port給資料庫…科科
victorhu iT邦新手 5 級 ‧ 2023-01-30 21:55:38 檢舉
成功加入資料以後想要加強安全的部分,可以請教大家該怎麼做比較好嗎QQ
froce iT邦大師 1 級 ‧ 2023-01-31 08:27:33 檢舉
iot常用的通訊協定是MQTT,量大的話得用MQTT去做。

如果不用MQTT,你至少前面放個web server做接收資料,這樣可以啟用 SSL、增加認證機制,並且避免DB直接暴露在網際網路上,隱藏DB真正的位置。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
hsiang11
iT邦好手 1 級 ‧ 2023-01-30 17:45:35
最佳解答

你可以玩樹莓派 還可以測出一個可用的資料庫程式
但是你竟然在網路這塊卡關了 這有些離奇

'192......:3307'
在外網測試 為何去連一個192開頭內網的IP?
你可能要先從你ISP提供的固定IP先查清楚
再去研究一下你的網路防火牆怎麼開port

victorhu iT邦新手 5 級 ‧ 2023-01-30 20:11:38 檢舉

謝謝大神指點迷津!

在這裡提供更多細節給未來需要的人
(如果有錯還請大家提醒我修正一下~感恩~)

我原本用的host是內網的ip
在外網(例如用行動數據連線)是不認得這個ip的
因為這個ip是由路由器分配給內網的裝置

後來我在路由器設定了通訊埠轉發(參考以下網址)

https://ningselect.com/30752/58/?fbclid=IwAR1kslsgOm91iihNxjyTaXpcSb0w-P7fQqeBBawBsD0kq6EQ4dyH49nFUXs

同時修改程式碼

# 連接 MySQL/MariaDB 資料庫
connection=
mysql.connector.connect(host='140....', # 固定ip
                        port="6xxx", # 同 port
                        user='xxxx',                                         password='xxxx')  # 密碼

最後記得在防火牆開port
就成功解決了!

ilwu iT邦新手 5 級 ‧ 2023-02-03 10:31:46 檢舉

開了對外通道. 建議最好加個連線 IP白名單
駭客隨時都開著機器人在掃 IP 和 port

我要發表回答

立即登入回答