無公網(wǎng)IP環(huán)境下的PostgreSQL遠(yuǎn)程訪問方案
前言
在當(dāng)前的網(wǎng)絡(luò)環(huán)境下,公網(wǎng) IP 資源日益稀缺,越來越多的用戶和企業(yè)面臨內(nèi)網(wǎng)部署的應(yīng)用無法被外網(wǎng)訪問的問題。其中,數(shù)據(jù)庫遠(yuǎn)程訪問是最典型的使用場景之一。
PostgreSQL 作為一款成熟的開源關(guān)系型數(shù)據(jù)庫,因其強(qiáng)大的功能特性和優(yōu)秀的性能表現(xiàn),被廣泛應(yīng)用于生產(chǎn)環(huán)境。然而,當(dāng) PostgreSQL 部署在內(nèi)網(wǎng)環(huán)境中時(shí),傳統(tǒng)的遠(yuǎn)程訪問方案(如端口映射、VPN 等)往往存在配置復(fù)雜、維護(hù)成本高、安全性不足等問題。
本文針對(duì)這一痛點(diǎn),提出并詳細(xì)分析了一種基于內(nèi)網(wǎng)穿透技術(shù)的解決方案。該方案的核心優(yōu)勢(shì)在于:
- *無需公網(wǎng) IP*: 利用提供的隧道服務(wù),可在內(nèi)網(wǎng)環(huán)境中暴露本地服務(wù)
- *配置簡單*: 通過安裝客戶端并配置簡單的 YAML 文件,即可完成隧道建立
- *安全性可控*: 支持 HTTPS 加密、訪問密碼、白名單等多種安全機(jī)制
- *靈活擴(kuò)展*: 支持多服務(wù)同時(shí)穿透、動(dòng)態(tài)域名、自定義端口映射等功能
從技術(shù)實(shí)現(xiàn)的角度來看,的工作原理可以概括為三個(gè)步驟:
*第一步:隧道建立* 客戶端在本地網(wǎng)絡(luò)中運(yùn)行,與 的云端服務(wù)器建立長連接。這個(gè)連接通常采用 TCP 或 WebSocket 協(xié)議,保持雙向通信。
*第二步:端口映射* 當(dāng)用戶配置了 PostgreSQL 的 5432 端口映射后,會(huì)在云端服務(wù)器分配一個(gè)臨時(shí)端口(如 8080),并將外部請(qǐng)求轉(zhuǎn)發(fā)到本地 5432 端口。
*第三步:身份驗(yàn)證* 為了保證安全性,引入了訪問密碼和 HTTPS 機(jī)制。用戶在連接時(shí)不僅需要知道域名和端口,還需要提供正確的訪問憑證。
我做過實(shí)際測試,在 100Mbps 的內(nèi)網(wǎng)環(huán)境下,使用連接 PostgreSQL 的延遲約為 50-100ms,帶寬保持在 5-10Mbps 之間。對(duì)于日常開發(fā)、數(shù)據(jù)查詢、報(bào)表導(dǎo)出等場景,這個(gè)性能表現(xiàn)是完全可以接受的。
如果你需要在無公網(wǎng) IP 的環(huán)境下部署 PostgreSQL 并實(shí)現(xiàn)遠(yuǎn)程訪問,是一個(gè)值得考慮的方案。它不是最強(qiáng)大的,但一定是最省心的。
本文將帶你從零開始,一步步實(shí)現(xiàn) PostgreSQL 的遠(yuǎn)程安全暴露,用 打通內(nèi)網(wǎng)與公網(wǎng)之間的“任督二脈”,真正實(shí)現(xiàn)“我在哪,數(shù)據(jù)庫就在哪”。
準(zhǔn)備好了嗎?讓我們開始這場“反向穿越”之旅!
1.在Centos7上安裝postgresql
本次在linux環(huán)境安裝。
在官網(wǎng)上選擇 Linux系統(tǒng),使用 yum來下載軟件,只需選擇對(duì)應(yīng)版本和平臺(tái),即可生成下載和安裝的腳本。

按照生成的腳本,安裝。我這里是:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql14-server sudo /usr/pgsql-14/bin/postgresql-14-setup initdb sudo systemctl enable postgresql-14 sudo systemctl start postgresql-14
按照步驟一步步操作。


![]()

修改PostgreSQL管理員密碼。
su postgres // 切換SQL模式 psql // 修改密碼 alter user postgres with password 'postgres123';

配置遠(yuǎn)程訪問。
修改pg_hba.conf,新增如下:
sudo vim /var/lib/pgsql/14/data/pg_hba.conf
![]()
新增一行:
host all all 0.0.0.0/0 scram-sha-256

修改監(jiān)聽地址為任意地址,即修改postgresql.conf文件:
vi /var/lib/pgsql/15/data/postgresql.conf
![]()
修改地址為 * :
listen_addresses = '*'

重新啟動(dòng):
systemctl restart postgresql-14
切換到postgres用戶,新建mydb庫:
su postgres create database mydb;

使用另一臺(tái)服務(wù)器,遠(yuǎn)程連接到該庫:
psql -h 192.168.42.140 -p 5432 -U postgres -d mydb

成功!
2.配置公網(wǎng)地址
通過配置,你可以在本地 WSL 或 Linux 系統(tǒng)上運(yùn)行 SSH 服務(wù),并通過 將其映射到公網(wǎng),從而實(shí)現(xiàn)從任意設(shè)備遠(yuǎn)程連接開發(fā)環(huán)境的目的。
- 隧道名稱:可自定義,本例使用了:postgres,注意不要與已有的隧道名稱重復(fù)
- 協(xié)議:tcp
- 本地地址:192.168.42.140:5432
- 端口類型:隨機(jī)臨時(shí)TCP端口
- 地區(qū):China Vip

創(chuàng)建成功后,打開左側(cè)在線隧道列表,可以看到剛剛通過創(chuàng)建隧道生成了公網(wǎng)地址,接下來就可以在其他電腦或者移動(dòng)端設(shè)備(異地)上,使用任意一個(gè)地址在終端中訪問即可。
- tcp 表示使用的協(xié)議類型
- 2.tcp.vip.cn是提供的域名
- 11084是隨機(jī)分配的公網(wǎng)端口號(hào)

通過提供的公網(wǎng)地址和端口,使用 SSH 協(xié)議從任意一臺(tái)主機(jī)連接到postgres賬號(hào)啦!
psql -h 2.tcp.vip.cpolar.cn -p 11084 -U postgres -d mydb

3.保留固定TCP公網(wǎng)地址
使用cpolar為其配置TCP地址,該地址為固定地址,不會(huì)隨機(jī)變化。

選擇區(qū)域和描述:有一個(gè)下拉菜單,當(dāng)前選擇的是“China VIP”。
右側(cè)輸入框,用于填寫描述信息。
保留按鈕:在右側(cè)有一個(gè)橙色的“保留”按鈕,點(diǎn)擊該按鈕可以保留所選的TCP地址。
列表中顯示了一條已保留的TCP地址記錄。
- 地區(qū):顯示為“China VIP”。
- 地址:顯示為“8.tcp.vip.cn:13299”。

登錄cpolar web UI管理界面,點(diǎn)擊左側(cè)儀表盤的隧道管理——隧道列表,找到所要配置的隧道postgres,點(diǎn)擊右側(cè)的編輯。

修改隧道信息,將保留成功的TCP端口配置到隧道中。
- 端口類型:選擇固定TCP端口
- 預(yù)留的TCP地址:填寫保留成功的TCP地址
點(diǎn)擊更新。

創(chuàng)建完成后,打開在線隧道列表,此時(shí)可以看到隨機(jī)的公網(wǎng)地址已經(jīng)發(fā)生變化,地址名稱也變成了保留和固定的TCP地址。

最后測試一下固定的地址是否好用,測試命令:
psql -h 8.tcp.vip.cn -p 13299 -U postgres -d mydb

這樣,我們成功打破了“沒有公網(wǎng) IP 就無法遠(yuǎn)程訪問數(shù)據(jù)庫”的固有認(rèn)知。
總結(jié)
總的來說,基于 的 PostgreSQL 遠(yuǎn)程訪問方案,為無公網(wǎng) IP 用戶提供了一個(gè)切實(shí)可行的解決方案。
*適用場景:*
- 個(gè)人開發(fā)者的本地?cái)?shù)據(jù)庫遠(yuǎn)程訪問
- 小型企業(yè)的項(xiàng)目部署和協(xié)作
- 臨時(shí)性數(shù)據(jù)導(dǎo)出和測試需求
*不適用場景:*
- 高并發(fā)生產(chǎn)環(huán)境(延遲和帶寬有限制)
- 對(duì)安全性要求極高的金融/醫(yī)療場景
- 需要穩(wěn)定連接和 SLA 保障的關(guān)鍵業(yè)務(wù)
*配置建議:*
- *優(yōu)先使用 HTTPS*: 避免明文傳輸敏感數(shù)據(jù)
- *定期更換密碼*: 至少每季度更新一次訪問憑證
- *設(shè)置訪問白名單*: 限制允許連接的 IP 范圍
- *配合 SSH 使用*: 重要數(shù)據(jù)操作建議通過 SSH 隧道進(jìn)行
如果你正在尋找一個(gè)輕量級(jí)、易維護(hù)的內(nèi)網(wǎng)穿透方案,值得嘗試。畢竟,技術(shù)是為需求服務(wù)的,能解決問題就是最好的方案。
以上就是無公網(wǎng)IP環(huán)境下的PostgreSQL遠(yuǎn)程訪問方案的詳細(xì)內(nèi)容,更多關(guān)于無公網(wǎng)IP下PostgreSQL遠(yuǎn)程訪問的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PostgreSQL時(shí)間相差天數(shù)實(shí)例例子代碼解析
在PostgreSQL數(shù)據(jù)庫中計(jì)算兩個(gè)日期或時(shí)間戳之間的差異可以通過多種方法實(shí)現(xiàn),常用的有通過日期轉(zhuǎn)換、AGE函數(shù)、INTERVAL和+運(yùn)算符、DATE_PART函數(shù)以及利用CURRENT_DATE或NOW()函數(shù),大家可以根據(jù)自己的需求選擇合適的方式,需要的朋友可以參考下2024-11-11
PostgreSQL實(shí)現(xiàn)數(shù)據(jù)表跨庫同步的四種方案
文章詳細(xì)介紹了四種用于實(shí)現(xiàn)PostgreSQL數(shù)據(jù)庫表數(shù)據(jù)變化實(shí)時(shí)或定時(shí)同步到另一個(gè)獨(dú)立PG庫的方法,包括觸發(fā)器+外部表、邏輯復(fù)制、Debezium+Kafka和pg_dump定時(shí)任務(wù),針對(duì)不同場景和需求,推薦了最適合的方案,并詳細(xì)闡述了各自的優(yōu)點(diǎn)、適用場景、配置方法和使用注意事項(xiàng)2026-05-05
PostgreSQL數(shù)據(jù)庫授權(quán)與自增序列操作實(shí)例代碼
在PostgreSQL中,自增序列是一種特殊的數(shù)據(jù)庫對(duì)象,用于生成唯一的數(shù)字序列,通常用于主鍵值的自動(dòng)生成,這篇文章主要介紹了PostgreSQL數(shù)據(jù)庫授權(quán)與自增序列操作的相關(guān)資料,需要的朋友可以參考下2025-08-08
對(duì)PostgreSQL中的慢查詢進(jìn)行分析和優(yōu)化的操作指南
在數(shù)據(jù)庫的世界里,慢查詢就像是路上的絆腳石,讓數(shù)據(jù)處理的道路變得崎嶇不平,想象一下,你正在高速公路上飛馳,突然遇到一堆減速帶,那感覺肯定糟透了,本文介紹了怎樣對(duì)?PostgreSQL?中的慢查詢進(jìn)行分析和優(yōu)化,需要的朋友可以參考下2024-07-07
Postgresql限制用戶登錄錯(cuò)誤次數(shù)的實(shí)例代碼
這篇文章主要介紹了Postgresql限制用戶登錄錯(cuò)誤次數(shù)的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
postgresql 實(shí)現(xiàn)修改jsonb字段中的某一個(gè)值
這篇文章主要介紹了postgresql 實(shí)現(xiàn)修改jsonb字段中的某一個(gè)值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL因大量并發(fā)插入導(dǎo)致的主鍵沖突的解決方案
在數(shù)據(jù)庫操作中,并發(fā)插入是一個(gè)常見的場景,然而,當(dāng)大量并發(fā)插入操作同時(shí)進(jìn)行時(shí),可能會(huì)遇到主鍵沖突的問題,本文將深入探討 PostgreSQL 中解決因大量并發(fā)插入導(dǎo)致的主鍵沖突的方法,并通過具體的示例進(jìn)行詳細(xì)說明,需要的朋友可以參考下2024-07-07
postgreSQL中的row_number() 與distinct用法說明
這篇文章主要介紹了postgreSQL中的row_number() 與distinct用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01

