內網穿透-公網訪問家庭內網

一、爲什麼需要內網穿透

相信學過計算機網絡知識的同學都知道,因爲IPV4地址的稀缺性,局域網內的電腦通過路由器上網時,是需要經過NAT轉換爲公網ip的,而電腦被分配到的私有ip一般是192.168.x.x(注:電腦ip地址查看可以通過ifconfig(Linux系統)或ipconfig(windows)系統命令查看),而在公網中的另一臺電腦要訪問該電腦時,該電腦沒有公網ip地址,是無法直接訪問的,所以需要用到內網穿透技術。

二、解決方案

使用路由器的端口轉發功能(僅針對電信網絡有效)

基本原理是讓路由器獲得一個公網ip,然後使用路由器的端口轉發功能,讓訪問路由器ip+特定端口的請求轉發到指定的局域網內電腦ip和端口上

1. 首先你需要一臺具有端口轉發功能的路由器,登錄路由器管理界面,進入高級設置頁面,確定路由器有虛擬服務器(或者類似名稱)選項:

2. 更改路由器的上網模式:現在電信寬帶光貓一般都自帶撥號和無線上網功能,當使用光貓的自動撥號功能連接寬帶時,光貓本身獲得了公網ip,光貓後面接的路由器分配到的便是光貓指定的私有ip。可是光貓又不具有端口轉發功能,而路由器因爲沒有公網ip也無法實現端口轉發功能。登錄路由器管理界面,進入高級設置頁面,點擊WAN口設置,查看詳情:

我的路由器已經被我更改成了撥號上網的方式,如果路由器是自動獲得ip方式的上網,那麼需要撥打電信客服電話,告訴工作人員將光貓上網方式由路由器模式改爲橋接模式。然後修改WAN口設置,修改連接類型,填上自己的寬帶賬號的密碼進行撥號連接。

3. 更改ip爲公網ip:因爲ipv4地址資源緊張,運營商分配給我們的上網ip地址其實是一個經過轉換過的私有ip地址,也就是路由器並沒有公網ip地址。需要撥打電信客服電話,告訴他們讓其分配一個公網ip(只有電信可以,聯通和移動不行,會告知沒有這項業務)。

4. 添加端口轉發功能:當以上步驟完成後,進入理由器管理界面,選擇虛擬服務器選項,添加轉發規則:

上圖中規則含義:當外部網絡訪問路由器ip地址+9999端口時,轉發到內網192.168.0.101機器的22端口上。

5. 測試:首先打開http://www.ip138.com/網站,此時可以看到自己的公網ip,然後打開操作系統的命令行窗口,使用telnet命令:telnet 你的公網ip 外部端口,如果能夠連接成功,證明全部設置已經成功。

6. 做完上述步驟後,雖然已經實現了內網穿透功能,但是有兩個缺點,1:ip地址難以記憶,沒有域名好記,2:雖然分配了公網ip,但是每隔兩三天ip就會變化一次,不固定。此時就需要用到動態域名解析功能,即將固定域名指向動態變化的ip。配置動態域名解析由兩種方式,第一種是花生殼的動態域名解析,第二種是使用阿里雲的動態域名解析功能。在這裏我介紹第二種方式。

7. 使用阿里雲動態域名解析步驟:

使用阿里雲動態域名的原理是通過阿里雲提供的sdk api,在程序中將購買的阿里雲域名映射到我們自己的公網ip,每隔一段時間檢測自己的公網ip有無變化,如果有變化,則調用程序更新映射。

1). 購買一個阿里雲的萬網域名,年費在40元左右。且被訪問的電腦運行的是centos/redhat系統(這種場景也非常合理,很多時候我們需要訪問家裏電腦,是因爲我們在上面部署了一些web服務應用,所以需要運行centos系統)

2). 安裝python-pip:

yum -y install epel-release
yum -y install python-pip

3). 安裝阿里dns python-sdk:

sudo pip install aliyun-python-sdk-alidns

4). 克隆我的github項目——DynamicDNS到本地機器:

git clone https://github.com/aiwangzhe/DynamicDNS.git

5). 登錄阿里雲官網,點擊自己賬戶信息,找到accesskeys選項,點擊進去獲取到自己的accessid和密碼:

打開DynamicDNS工程下的AliRequest.py文件,找到getAcsClient()方法替換裏面的accessid和密碼:

def getAcsClient():
    return AcsClient("your access id", " your access token")

找到AliRequest.py文件中的main方法,將下面內容替換爲自己的域名:

# TODO replace your domain name
recordId = getDomainRecordId("your domain name", "www")

然後執行sh UpdateIP.sh命令,命令執行成功後,會在用戶home目錄下生成Last_IP.txt文件,裏面記錄了當前機器最新的公網ip。登錄阿里雲的管理控制檯,點擊雲解析DNS選項,可以看到域名已被映射到新的ip:

6). 添加定時任務:雖然執行sh UpdateIP.sh命令成功更新了域名到ip的映射,但是因爲公網ip會經常變化,所以需要將該命令添加到linux定時任務中,定時更新ip。打開工程目錄下的CheckIpTask.cron文件:

*/5 * * * * sh /home/wangzhe/DynamicDNS/UpdateIP.sh

內容含義爲每5分鐘執行一次UpdateIP.sh腳本,該腳本會先去檢測公網ip是否已發生變化,如果發生了變化則調用阿里雲sdk更新域名映射。讀者需要先替換UpdateIP.sh文件路徑爲自己的真實路徑,然後使用crontab CheckIpTask.cron命令,將其添加到定時任務中。至此大功告成

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