北京 王擇
場景:公司未單獨購買專用網絡,使用的是非專用網絡PPPoE 撥號模式連接互聯(lián)網,運營商網絡使用動態(tài)分配方式分配公網IP 地址,導致公網IP 會定期變化(約6-7天會固定變化一次,主動重啟撥號路由器或光貓重啟掉電后也會觸發(fā)IP 地址的變化)。光貓運行在路由模式,光貓WAN口獲取到公網IP 地址,光貓下聯(lián)路由器WAN 口獲取到的是光貓DHCP 分配的內網地址。
需要解決的問題如下:
第一,光貓需要調整到橋接模式(即讓光貓充當一個單純的光轉電模塊使用,不啟用光貓的路由功能),讓路由器WAN 口獲取到公網IP方便做端口轉發(fā)。
第二,公網IP 地址變化后自動修改DNS 解析地址,實現(xiàn)公網IP 變化,域名訪問不變的需求。(這個問題最簡單解決方案是購買DDNS服務,但服務價格較昂貴,網絡轉發(fā)速度也受到DDNS 服務提供商限制)
為了最大程度的減少開支,我們不采用購買服務的方式去解決第二個問題,以下開始介紹上述兩個問題的解決方案,并著重對第二個問題進行詳細介紹。
目前光貓的規(guī)格比較多,各家運營商提供的型號不盡相同,如果運營商提供了超級管理員密碼,可以在光貓的管理頁面調整光貓為Bridge 橋接模式并重啟光貓,然后自己的路由器就可以進行PPPoE 撥號了。如果運營商提供的光貓管理賬戶權限不夠,沒有配置切換的頁面,可以聯(lián)系運營商客服后臺進行橋接模式切換,若客服拒絕也可自行處理,處理思路各型號都是一樣的,光貓底層架構都是基于Linux 內核開發(fā)的,故開啟光貓的22 端口后(配置頁可找到開關),可以使用ssh 命令去遠程連接光貓的網關地址,根據配置文件內容進行分析,找到當前生效的系統(tǒng)配置使用vi 編輯器進行橋接模式的修改。
修改成功后使用自己的路由設備進行撥號,可以看到路由器WAN 口會獲取到一個公網IP 地址(非私有地址),可參考私有地址段:
獲取的地址不在以上三類私有地址段,就算成功解決了第一個問題。根據運營商的配置,有時候獲取到的依然是私有網絡地址,在保證光貓橋接狀態(tài)正常的前提下,需要聯(lián)系運營商客服進行修改,目前運營商會協(xié)助進行動態(tài)公網IP 的分配,運行商后臺修改后10 分鐘左右重啟路由器,配置會生效。這里分享的是一個解決思路,具體操作細節(jié)會根據光貓型號和網絡運營商有略微差異。
以上是使用自有路由器的方案,直接使用光貓的路由功能也可(缺點:路由轉發(fā)效率受到光貓?zhí)幚硭俾实南拗疲?,需要在光貓上進行端口轉發(fā)配置。
1.思路
Linux 虛擬機一臺,用于獲取公網地址,并調用阿里云域名解析DNS 的API 接口進行修改解析的IP 地址。
2.最終效果
通過域名訪問公司云服務,實現(xiàn)網絡滿速轉發(fā)的需求。
3.需要準備
(1)阿里云域名一個,并已經配置好了二級域名的解析(使用其他DNS 服務商采購域名也可以,須能夠支持調用API 接口修改解析地址,預配置解析到的IP 地址可以隨意,只需存在這一條解析即可,后續(xù)會調用API 接口修改這個IP 地址)。
(2)Linux 內網主機一臺(實體機虛擬機均可)。
(3)Linux 主機網口需直連或通過交換設備連接路由器,路由器WAN 口獲取的是公網IP 地址。
4.實現(xiàn)方法
(1)虛擬機安裝Centos7系統(tǒng),安裝python。
#yum -y install python
(2)安裝pip。
(3)安裝阿里云sdk。
(4)使用以下代碼調用阿里云API 接口。
為保證后續(xù)更新替換IP 地址,按照本示例配置需保證13 行為request.set_Value("
在/home/ip/ 目錄下新建名為ch_dns.py 的python腳本并編輯以下內容(需修改“<>”括起的變量)
Python 示例腳本,如圖1所示:
python 代碼需要修改的地方:
①access Key ID、accessSecret 從阿里云控制臺創(chuàng)建,進入阿里云控制臺管理頁,鼠標放到右上角個人頭像,可以看到accesskeys 按鈕,點擊進行配置。
圖1 調用阿里云API 接口腳本
圖2 獲取本機公網IP 腳本
②RecordId 號可以進入API 接口測試網址進行查詢,可參考https://api.aliyun.com。
在OPENAPI模擬調用頁面中,搜索字段DescribeDomainRecords,輸入必填項DomainName 字段(二級子域名名稱),點擊調用接口按鈕,在右側API接口返回值中可以獲取到RecordId 號(一個二級域名對應唯一的DNS 記錄ID 號)。
③Value 字段是當前公網IP 地址,需要動態(tài)修改,需要另一個shell 腳本進行修改(下面會介紹)。
注意:替換后的變量均以英文字符單引號或雙引號引起,無需再輸入兩邊的尖括號,單引雙引格式請參考實例Python 腳本。
5.本機獲取公網IP 地址,然后使用shell 腳本sed命令替換ch_dns.py 腳本的Value 地址字段行:
此腳本作用是獲取當前主機的公網地址,并賦給變量IP,然后使用sed -i 命令將當前獲取的新公網IP 替換python 腳本中的舊IP 地址。其中13c 代表ch_dns.py 的 第13 行,可 用vi 編輯器打開ch_dns.py 腳本,使用:set number 命令查看request.set_Value("
給shell 賦予執(zhí)行權限:
6.依次手動執(zhí)行sh/home/ip/get_ip.sh 和python/home/ip/ch_dns.py,觀察有無報錯。
7.將以上兩個腳本加入Linux 定時任務,如圖3 所示。
8.登錄阿里云后臺,檢查解析狀態(tài)是否正常,并在任意電腦使用命令ping 域名地址進行測試,看是否解析到路由器獲取的公網IP地址。
圖3 定時任務配置
9.路由器根據內部服務器訪問端口做好外部端口的端口轉發(fā)。
10.使用任意一臺電腦telnet 域名<空格>外部端口號,如果可通則配置完成。
說在最后,本篇文章介紹的方案主要是在非固定IP的非專用網絡環(huán)境下,為了提升公司內部運維的服務水平,方便搭建公司內部使用的網站或云平臺(非常不建議對外部人員搭建重要服務使用),但因價格低廉,非專用網絡單根光纖接入連接數是有限的,一般1000-2000個連接數左右,因此達到限制后可能會出現(xiàn)網絡不穩(wěn)定。
如果公司人數在50-100人的情況下,建議網絡接入使用雙線路接入做負載的形式實現(xiàn),同時對單個用戶的連接數做好限制,正常辦公情況一個用戶連接數約為40條左右,故可參考限制單IP最大連接數為60。
另外,我們可以使用本方案在自己家中搭建屬于自己運維的工具平臺,將運維常用的文件保存在自己的云平臺中,在任何地方都可以查找到自己的資料或者工具進行查看下載,可以大大提升我們的運維能力和服務質量。
這種方案,對于個人或小型初創(chuàng)公司來說可以大大節(jié)約網絡支出經費。當然,大于100 人的大公司還是要首選商用專線接入(不限制網絡連接數),一切運維服務的準則還是要保證基礎設施和網絡的穩(wěn)定作為前提條件。
以上方案是筆者多次調試得出的干貨,目前云盤已經投入使用,解決了公司同事從外部網絡環(huán)境在線查看、修改、下載公司內網保存的資料需求,后期還有其他云服務工具可以逐一上線使用,通過這篇文章把經驗分享給大家,把我們手里的動態(tài)IP 充分使用起來,使它成為我們運維的一個好幫手吧!