本帖最後由 gfx86674 於 2015-8-20 10:27 編輯
小弟與朋友(ghostplayer)的nas都是彼此開放給對方.
因synology_nas所提供的ddns支援ipv6 ,而且ipv6無nat的設計.
所以當朋友輸入ddns即可直接對小弟的NAS做連接;
但朋友的buffalo_NAS連結卻麻煩多了,沒提供ddns,只能用ipv4 ,
還得在他的路由器設定virtual-server相關...
所以小弟構想是這樣的:
ipv6地址是8個碼組合而成,2001:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/128
前4碼是中華提供,2001:XXXX:XXXX:XXXX::/58
後4碼是裝置內網,fe80::XXXX:XXXX:XXXX:XXXX/128
所以構想是當朋友連進到小弟NAS時,把朋友電腦的ipv6-ip記錄起來.
然後用他nas內網後4碼 取代朋友電腦ipv6-ip的後4碼,所得的結果即是朋友NAS的ipv6-ip.
於是想著想著就著手編寫Script.
但過程還得注意一件事:
中華給的浮定製ipv6前4碼中,只有前3碼是固定的,而第4碼是浮動且長度不一.
所以要考量第4碼:
2001:XXXX:XXXX:XXXX::/58
2001:XXXX:XXXX:XXX::/58
2001:XXXX:XXXX:XX::/58
2001:XXXX:XXXX:X::/58
這些情況...
沒顧慮後,便開始編寫Script囉.
朋友Hinet給的前3碼為2001:b011:5008::/51
Buffalo_NAS的內網地址為fe80::f818:c114:7e0:6fa1/128
腳本:- :local ghostplayer [/ipv6 firewall connection get \
- [:pick [find ($"src-address" in 2001:b011:5008::/51)&&(dst-port=445)] 0] src-address]
- :local i 16
- :local arrow
- :while ($arrow!=":") \
- do={
- :set arrow [:pick $ghostplayer $i]
- :set i ($i+1)
- }
- :set ghostplayer ([:pick $ghostplayer 0 $i].[:pick "fe80::f818:c114:7e0:6fa1/128" 6 24])
- :if ([/ip dns static get *9 address]!=$ghostplayer) do={/ip dns static set *9 address=$ghostplayer}
複製代碼 腳本會把記算後的ipv6-ip存到dns-static裡,取名為ghostplayer.nas ,
並每小時比對ip是否相異 ,相異的話會自行更正.
所以日後我只要在家中任何一地方用ghostplayer.nas當地址,
即如同使用ddns ,可對朋友的buffalo_nas直接做連結囉 |