本人家里用的軟路由,PVE下虛擬安裝了CentOS,並安裝了Samba服務,在家庭局域網訪問和共享文件很方便,如果想在公司電腦和手機也能隨時隨地訪問資源,就需要實現公網訪問,但 Samba 的默認端口是445,公網因為 smb1 漏洞等安全原因445端口全部封了; Windows 系統默認不提供非445端口的samba訪問,所以需要用端口轉發實現訪問。
前提
有內建 Samba 的服務器(電腦),有公網IP,路由器做了端口轉發,並對域名做好DDNS,也可以直接IP訪問,但一旦路由器重新撥號,IP變化之后,需要重新設置;沒有公網IP的需要用到其他內網穿透如frp等,本文暫不涉及。
假設
1、內網samba服務端口:445
2、公網IP:123.123.123.123
3、公網端口:44500
4、做好DDNS的域名:smb.domain.com
流程
1、用管理員賬號打開CMD,以下命令查詢445端口占用情況
netstat -ano | findstr 445
可以看出是pid為4的進程進行監聽,從任務管理器上看是名叫System,備注"NT Kernel&System"。
2、本地 Windows 電腦打開:控制面板-所有控制面板選項-Windows工具-服務-Server,啟動類型改為“禁用”,並停止服務,如下圖:
3、重啟機器,再次用步驟1種命令查看445端口占用情況,應該是無占用信息(沒有返回信息)。
4、利用 Windows 自帶的端口轉發 netsh interface portproxy 命令,修改端口轉發(如果使用IPV6網絡,也需要進行端口轉發,具體的參照 netsh interface portproxy 使用幫助)
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=smb.domain.com connectport=44500
5、用以下命令查詢端口轉發是否設置成功(IPV6 同理)
netsh interface portproxy show all
應該可以看到相關轉發信息,說明轉發成功。
6、用步驟1中命令,查看445端口占用情況,此時的進程ID應該不是4,說明成功了。
7、磁盤掛載(注意,IP地址為本機地址127.0.0.1)。
8、刪除端口轉發:
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445
9、重置所有端口轉發:
netsh interface portproxy reset
解決重啟失效
以上方法在Win10,Win11電腦上有個缺陷,目前還沒有好的解決方法,就是電腦重啟失效,查看的話,轉發是存在的,但就是無法實際轉發,所以,沒辦法,只能自己寫個批處理命令,每次重啟以后運行一次或加入計划任務里自動運行。