目前使用三大運營商寬頻服務都會下發公網IPv6地址,這樣我們想要在外網訪問家裡的路由、NAS等裝置就可以直接通過IPv6地址來訪問了。但是每次重新撥號後IPv6地址都會改變,而且IPv6的地址很長,這樣就引出了動態域名服務,即DDNS。
其實DDNS的原理就是將本地獲取到的公網IP地址告訴域名服務商,並且在IP地址發生變化時也會同步新的IP地址到域名伺服器程式,這樣我們只需使用域名就可以隨時隨地去訪問家裡的裝置了。
為了安全起見,路由器的防火牆策略預設是禁止從外網主動訪問內網的裝置的,我們需要將被訪問的裝置上的服務對應的埠開放出來。
歸納起來其實就兩步:1)DDNS;2)開放埠。
下面我們就來實際操作一下吧
一、配置IPv6 DDNS
以下是兩種DDNS方法,任選其一即可
1.使用每步DDNS
首先去免費動態域名解析伺服器IPV6內網穿透軟體監控原始碼下載-青島每步 (meibu.com)這個網站註冊一個域名,如:xxxxxx.noip.cn,並且複製出註冊時設定的登陸密碼備用。
下載meibu.sh這個指令碼,將第35行中xxxxxx.noip.cn和123456改為你自己申請的域名和登陸密碼。
將meibu.sh指令碼使用WinSCP等工具上傳至需要做域名解析的裝置中,此處以我的OpenWrt為例
SSH登陸裝置
建立目錄
mkdir -p /usr/share/meibu
將指令碼上傳至此目錄(/usr/share/meibu)
賦予指令碼執行許可權
chmod +x /usr/share/meibu/meibu.sh
執行指令碼
/usr/share/meibu/meibu.sh
檢視ip.txt檔案內容
ll /usr/share/meibu cat /usr/share/meibu/ip.txt
檢視域名解析到的地址是否和ip.txt中的匹配
nslookup xxxxxx.noip.cn 8.8.8.8
如果兩個地址一致則表明解析成功
新增定時任務
crontab -e
新增以下內容
* * * * * /bin/sh /usr/share/meibu/meibu.sh
這樣每分鐘就會查詢一次IP地址,有變化時就將新的IP地址繫結到域名上
2.使用dynv6 DDNS
去Free dynamic DNS for IPv6 (dynv6.com)這個網站註冊一下,使用郵箱確認(注:郵箱連結確認可能需要梯子)後登陸
到dynv6這兒建立一個域名
建立好後切換到instructions標籤,如下圖,複製域名和token備用
下載dynv6.sh這個指令碼檔案
SSH登陸裝置
建立目錄
mkdir -p /usr/share/dynv6
上傳指令碼至/usr/share/dynv6目錄中
賦予指令碼執行許可權
chmod +x /usr/share/dynv6/dynv6.sh
輸入以下命令進行解析(注意將紅字部分替換為自己的token和域名)
token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /bin/sh /usr/share/dynv6/dynv6.sh xxxxxx.v6.navy
檢視域名解析到的地址
nslookup xxxxxx.v6.navy 8.8.8.8 cat /usr/share/dynv6/.dynv6.addr6
兩個地址一致則域名解析成功
新增定時任務
crontab -e
新增以下內容
* * * * * token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /bin/sh /usr/share/dynv6/dynv6.sh xxxxxx.v6.navy
二、開放外網訪問埠
防火牆的設定都是在主路由上進行的,這裡分別以主路由是Padavan和OpenWrt開放8088埠為例。
1.Padavan開啟IPv6外網訪問埠
(1)開啟路由器自身埠
ip6tables -A INPUT -p tcp --dport 8088 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 8088 -j ACCEPT
(2)開啟區域網其他裝置埠
ip6tables -A FORWARD -p tcp --dport 8088 -j ACCEPT
(3)開機自動開放埠
在“高階設定”->“自定義設定”->“指令碼”->“在防火牆規則啟動後執行:”最後新增以下內容
# 開啟路由器自身埠 ip6tables -A INPUT -p tcp --dport 8088 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 8088 -j ACCEPT # 開啟區域網其他裝置埠 ip6tables -A FORWARD -p tcp --dport 8088 -j ACCEPT
點選最下面的“應用本頁面設定”
2.OpenWrt開啟IPv6外網訪問埠
(1)開啟路由器自身埠
ip6tables -I INPUT -p tcp --dport 8088 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 8088 -j ACCEPT
(2)開啟區域網其他裝置埠
ip6tables -I zone_wan_forward -p tcp -m tcp --dport 8088 -m comment --comment Allow-8088 -j zone_lan_dest_ACCEPT
(3)開機自動開放埠
vim /etc/rc.local
在exit 0上面新增
# 開啟路由器自身埠 ip6tables -I INPUT -p tcp --dport 8088 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 8088 -j ACCEPT # 開啟區域網其他裝置埠 ip6tables -I zone_wan_forward -p tcp -m tcp --dport 8088 -m comment --comment Allow-8088 -j zone_lan_dest_ACCEPT
儲存退出
附:使用socat轉發內網IPv4服務
如果不是訪問區域網NAS這類對傳輸速度要求特別高的裝置,可以在主路由上使用socat來進行轉發,這樣就只需要在主路由上配置一次DDNS,然後想訪問區域網哪個裝置只需配置socat轉發並開啟主路由自身的外網訪問埠即可,如外網訪問主路由的IPv6 8088埠時轉發至內網裝置的192.168.2.110:80這個服務,只需執行以下命令即可:
nohup socat TCP6-LISTEN:8088,reuseaddr,fork TCP4:192.168.2.110:80 > /dev/null 2>&1 &
開機自動執行轉發
Padavan韌體:找到“高階設定”->“自定義設定”->“指令碼”->“在路由器啟動後執行:”,新增以下命令
nohup socat TCP6-LISTEN:8088,reuseaddr,fork TCP4:192.168.2.110:80 > /dev/null 2>&1 &
點選最下面的“應用本頁面設定”
OpenWrt韌體:將上面的命令新增到/etc/rc.local檔案(exit 0上面)中,儲存退出。