網址的免費申請:no-ip

No Comments

興奮的時刻到來。此前,我們必須使用 http://localhost/ 來開啟我們的網頁。現在我們想要透過網際網路的方式來開啟,就必須擁有一個於自己的 hostname,例如 https://waterfalls.ddns.net。既然架站到目前為止,都沒花半毛錢,我們若有免費的網址可用,可說完美極了。真的有耶:no-ip.com 提供這樣的服務。還有別忘了,我們只是使用電信公司寬頻撥接的一般庶民小老百姓,用的是浮動 IP;no-ip 也提供浮動 IP 的貼心解決方案。

申請及套用的步驟很簡單。筆者當前使用的網址是當初隨便取的也準備註銷重新申請一個並截圖做申請說明。

取得了網址例如 abc.ddns.net 之後。我們的 IP 之所以浮動,是因為電腦網路設備重啟/電信維護與策略等,會因而變動。故 no-ip 提供了客戶端/即本地端的一個應用程式,會在我們的電腦重新開機後做一次 renew 的動作,例如新 ip 是 123.456.78.9,應用程式便將我們當前的這支 ip address 發送給 no-ip 的廣域名稱伺服器端做 abc.ddns.net <–> 123.456.78.9 的對應的更新。如稍前提到,電信公司突然換了一組新 ip 給我們(發生機率低(所以才叫浮動)),只要重啟該應用程式就可再度連上我們的網站。

Ubuntu apt source list 沒有提供這支應用程式,但 snap 有。

  • 安裝 no-ip client application
  • snap install noip-client
  • 安裝完,接著設定我們取得的網址。往後若有異動 hostname 也一樣執行它來設定:
  • sudo noip-client.configure
  • 欲重啟,更新 ip address:
  • sudo systemctl restart snap.noip-client.launcher.service
申請新帳號,點擊 Sign Up
接著進入建立個人資料畫面,電郵位址,密碼為必填,其他選填的若欲先不填,勾選即成。網域名稱可自選(筆者選 ddns.net)。似乎先不填進入主畫有更多名稱可選。子網域也就是由您自己命名的。如筆者用的是 waterfalls。所以筆者的 hostname 便是 waterfalls.ddns.net。另外也有付費的漂亮順眼易記的(子)網域名稱可供使用者選擇。
接著點擊付費(有延伸)或免費(只有基本)的功能,筆者選免費的。點擊後,系統會發送電郵給您,請進信箱收件做認證確認。
直接點擊確認,便能啟用您的帳號了
會跳出網頁說您的帳號已啟用,接著,
點擊 My Account 進入您的帳號管理畫面
在這邊,免費版提供總共三個 hostname 給您使用。並且可以選擇不同性質的 hostname。筆者已用掉一個,現在欲再建立一個,DNS 別名,做為實驗用。
筆者的點選如圖示,意思是說,wearbiz 這個別名,將導向到另一個 Target hostname ,即 waterfalls.ddns.net。若您三個都未建立,則 Record Type 應該先選擇 DNS Host (A)
建立結束後回主畫會列出您已使用的 DNS record。就醬,沒事登出。
noip-client app 的安裝與設定,官方名稱是 DUC。請記得每三十天內要收官方寄來的郵件,做確認持續使用的回覆。沒回覆逾期的話,hostname 就會被停用/移除。付費版就不需要這一步。設定完成後,請記得重啟 DynamicUpdateClient。
  • 最後,測試:
  • 開啟網頁 http://ifconfig.co/
  • 會秀出您的 ip address
  • 再聘您的網址 ping waterfalls.ddns.net
  • 這二者的 ip address 會是相同的。或者若聘不到的話,試試重啟 DUC 再聘看看。

補充:
使用 router 內建 ddns 自動更新 hostname/ip
How to Configure DDNS (Dynamic DNS) in a Router(NOIP)

另外還有一點,當對映使用浮動實體 ip 時,每當 reboot 後,可能會導致 dns/ip 映射失效(此例發生在我的數據機同時提供一個固定 ip 及數個浮動 ip),或是有失敗機率。故可另外生成一支 system service,在每次開機後執行 noip-service 的 restart。
範例如下:

[Unit]
    Description=restart noip-service in case of fault after reboot
    After=snap.noip-client.launcher.service systemd-networkd-wait-online.service
    Wants=systemd-networkd-wait-online.service
[Service]
    Type=idle
    ExecStartPre=/bin/sleep 5
    ExecStart=/bin/systemctl restart snap.noip-client.launcher.service
[Install]
    WantedBy=multi-user.target
  • 參考資料
  • http://linux.vbird.org/linux_server/0350dns.php
  • https://www.linuxquestions.org/questions/linux-networking-3/no-ip-dns-updater-iptables-rules-757074/
  • https://github.com/mkg20001/noip-client-snap
  • https://gist.github.com/NathanGiesbrecht

20230516 更新

接下來來玩一點進階的。
(補註:sudo snap run noip-client.configure,事實上執行下它已有讓指定哪張 nic 的選項了,不過僅此尚不能做到自訂個別的對應)
假設,我有一台主機有 4 個 Gbps 網孔,又 isp 可提供數個對外的浮動 ip,那麼便有欲望想要 4 個網孔全用上,並且四個都是各異的實體/公開浮動 ip,且都將是具有對外公開的不同的 hostname/網址。那表示我將會有 4 個獨立的網站;即,我對這幾個網站查 ip 時,不會發現它們全是同一個 ip address(因為真的就是相異 ips);否則便輕易被人查覺此幾個網站都來自同一台主機。
先說,要達成此功能,當前非筆者能力所及,即,最後關卡會出現在 routing tables;且由於 ip 是浮動的,所以當前對筆者無解且也到此為止。(所以封包因為有共存的不同的 ip/相同 routing table,所以很難走出去,輕則網路卡卡重則完全不會動)
1. bond mode:採取 bond mode,造成 ssh 進入後便嚴重卡頓。不過另提若在同一網域下是 ok 的例如 192.168.1.x。則 bond mode 可以使用,但效果應沒優於非 bond mode。部份設定如下,

  ethernets:
    enp3s0:
      dhcp4: false
      dhcp6: false
    enp5s0:
      dhcp4: false
      dhcp6: false
# note: need to add a line "bonding" in /etc/modules
  bonds:
    bond0:
      macaddress: xx:xx:xx:xx:xx:xx
      interfaces:
        - enp3s0
        - enp5s0
      dhcp4: true
      dhcp6: true
      mtu: 9000
      parameters:
        mode: 802.3ad
        lacp-rate: fast

後續會引入有聚合功能的 switch 來玩玩看(又有初坑,如下***),看能不能無痛成功。
2. 接著就是感興趣的話題了,如何在同一台主機上,使用 noip utility 去實現數支不同的 public ips 的不同的網址對應。
前期,筆者想到使用在自訂的 network namespace 下,只納入數個不同 nics 中的其中一個,則在此下執行 noip 便可使 noip 只看到這張 nic,從而如預期的做了 hostname-ip 的對應。
而失敗的原因是,也沒失敗,而是最後才發現,noip-util 會認網卡,即,當初 configuring 時,會已記錄哪張 nic 的 public ip,這意謂著此 namespace 算多此一舉了因為,
很簡單地,我們只要在 configuring 時,將其它網路卡都 shutdown 掉,則當然 noip 只認那張能用的網卡了。
因此,能用的 namespace service 如附,請自行研究。
3. 接下來來看兩行指令,路徑非絕對可自行變通。
其中主程式如前半段路徑,組態如後半段。

/snap/noip-client/4/bin/noip2 -C -c /var/snap/noip-client/4/noip2-kenwoo.conf

/snap/noip-client/4/bin/noip2 -M -c /var/snap/noip-client/4/noip2-kenwoo.conf

第一行是 configuring,即設定 email/password 及 hostname。此時,必須確保只有一張網卡 if up。
第二行是執行對應,原本沒有 -M 選項,但原先已有 snap 的版本已常駐在跑,即,原先的 active service 都不用去動它。而前面有提過 refresh 的 service,我們可以偷懶地把第二行加入到那支 service 內。請自行新建組態檔/可先查詢該目錄下。
因為有第二份 noip util 要跑,所以要加入 -M(ultiple) 選項。
大概就醬了。
總之,可如所預期,可以 ping 成功不同 hostnames/ip-addresses,但就是網路卡頓或不動。待解。。。
。。。(補充)後來才又知道。。。/etc/sysctl.conf,uncomment ip forwarding,再重啟以 sysctl net.ipv4.ip_forward 查詢 ip forward 是否成功啟用。。。這設定是必要的。。。

(補充)最後屢經數十次的嘗試,應只有一顯而易見的結論(當前認知,不見得對,基於有 dhcp 的前題下):routing table 即便依不同 nic 同時加了數個 default route;即便進來可能可以順利;即便出去可由不同的 nic 實體路徑,但出去總是會先經由設定在某特定 nic 的 default route entry/優先序最高者,因而無法正確對應。當然另一個可能是筆者對 routing table 認知還很初階。。。
因此想要進得來也走得出去,接著,
只能再尋求前述 namespace 是否可以得解(相互隔離的 routing table)。又或是在 dhcp 給定網路參數後再 sh 去追加 routing table。
可能後者比較算是正解。若成功,下面會再更新。
(更新)
問題主要關聯於出去的時候。
參考這篇的做法,手動嘗試下,公開 ip 共存的問題是可以解決的。
https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html
並且,預設的路由,可以做到某程度的 load balance。
回到最原始的問題,在 ip 順利共存的前題下,noip configure 即便讓選擇了某 nic,但它實際在做對應時(結果論)仍依 kernel 當下由哪一張 nic 出去/又或已記錄哪個 ip 是可通的,即會選擇它;即,ip 的被取決非唯一。
因此讓 noip utility 附屬在 namespace 下應不得不為之。且又埋了一個疑慮;nic 移入移出時是否會造成網路參數又重設。那等於沒做。
該把問題說盡;因此,在實作 namespace/service/shell-script/network-parameter retrieval for noip-utility,就有相當的難度及潛在問題,再來,noip-utility 預設就是常駐的 service,當 dhcp renew ip 時,它會即時跟著更新嗎?那我們實作的所搭配者又如何?
結論是愈挖難度愈高。。。
事實上讀者已一頭霧水了,容筆者一言以蔽之/提出求助於此問題:在同一台主機上,在不使用 vm or docker 的前題下,我已有 fixed public ip 用於商業網站,那麼如何共存一(數)個筆者的個人網站用的是 floating public ip,且配有 ddns.net 所提供的 hostname?即便 reboot or dhcp renew 都運作得妥妥當當不用人介入的?
為求有一個快速的參考,我將上述連結文章重點貼於下,

# enable ip forward
# add tables in /etc/iproute2/rt_tables
# $IF1 the name of the first interface
# $IP1 the IP address associated with $IF1
# $P1 the IP address of the gateway at Provider 1
# $P1_NET the IP network $P1 is in


ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

ip route add default via $P1 (or use alternative load-balance designated with *)

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1 (*)
***
netgear gs108t v2 網管型網路交換機

0a. 欲連上 gs108tv2 之 web 管理平台:
0b. 若當前只有一台電腦連接,按照步驟 1。若至少一台電腦及一台路由器連接,則按照步驟 2。
0c. 以下操作都是在 linux 平台上之觀點,其他平台類推。
0d. 因為 gs108tv2 無內建 dhcp server 乃或模擬的 dhcp 配發封包,所以單純接上一條網路線,是無法與它建立連線的,
      且依本人當前認知其使用手冊內並未提及此點;使用者插上網路線便直接存取 http://192.168.0.239/ 是行不通的。

1a. 首次安裝,若只有一台電腦網路線/client,如下操作。
1b. client 電腦上,取消 linux 的網路管理 daemon,例如 NetworkManager,改由 networkd。
1c. 若網卡為 enp1s0,netplan 設定如下,
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      optional: true
      dhcp4: false
      dhcp6: false
1d. 以 sudoer 執行以下命令:
1e. ip addr add 192.168.0.238 dev enp1s0
1f. ip route add 192.168.0.128/25 src 192.168.0.238 dev enp1s0
1g. (除非結果連不上,否則應略過此行 ip route add default via 192.168.0.239)(本行刪除)
1g. (除非結果連不上,否則可略過此行 ip route add default via 192.168.0.254)
1h. web browser 上輸入前往網址 http://192.168.0.239/ 即成,密碼 password。
1i. 註,此步驟下,linux 版本的 gs108tv2 switch discovery utility 應是無效用的,毌使用之。

2a. 首次安裝,連接方式必須一進(路由器含 dhcp server)一出(client 電腦)兩條網路線。
2b. dhcp server 會配發 gs108tv2 及 client 二者 ip,二者始能連線,
      其中 gs108tv2 之 ip,請注意不再是 192.168.0.239,
      而是從路由器之管理平台中之連線狀態查找其 MAC addr 所配對之 ip。假設是 192.168.100.20.
2c. web browser 上輸入前往網址 http://192.168.100.20/ 即成,密碼 password。


****
此 device 的 LACP 設定可參考手冊或以下這篇,
http://club.ntgrchina.cn/Knowledgebase/Document_detail.aspx?Did=222
簡單講,設定邏輯就是先建立一群組,相關選項都 enable 並選擇 static/LACP 之 LACP,接著進階選項將 ports 加入群組。
PC 端就是啟用 bonding;可觀察到 syslog 不再有先前未使用 LACP-switch 時的錯誤訊息。
目前已知在同一網段下沒有問題,好像有提及須在同一網段下,故異網段會再測試看看能不能用(*****)。
而是否聚合成功的測試,只要分別把其一的網路線拔掉看傳輸有沒有中斷便可得知。


*****
未查證,因 switch 作用在 OSI 第二層,所以應沒有網段的問題。應只是 LACP 要求各介面都支援相同的 protocol。
LACP 應屬於一種中介,所以雙端都必須支援 lacp,並且此中介外延的邏輯兩端也各是一個 bond(nic),
所以是筆者妄想錯了。即便從路由器過來的多網孔要 bonding,那麼它本身就必須具備支援 LACP 了。
所以說從 ISP 那(或某路由)過來,即便串接此 lacp-switch,也只配發一個 ip 給此 bonding( ports);
而 switch 則負責控管 bonding 起來的那幾個 ports 的收發與 load balance(pc-side)。
然而,若是有兩個 ISP 在此 switch 上,或說有真正兩個不同的頻寬源,以實現真正的頻寬疊加,
那表示至少該有 bonding ports 與 ips(or others) 的一一對應才行,不過這或許也只能在 pc 端上作實現,也是當前真正的問題。
退一步說,或可嘗試降介面之傳輸頻寬再 bonding 起來以可測試看出 bonding 效果。
話又說回來,還記得前面一開頭使用 bonding,
即便沒有 LACP-switch,也是 workable 的嗎,真神奇。
(通過插拔測試,錯誤訊息如下:)
(bond0: (slave enp1s0): An illegal loopback occurred on slave)
(Check the configuration to verify that all adapters are connected to 802.3ad compliant switch ports)
(bond0: (slave enp2s0): An illegal loopback occurred on slave)
(Check the configuration to verify that all adapters are connected to 802.3ad compliant switch ports)
(是不是相當於方才提到 static/LACP 選項的 static mode。而 pc 端會有錯誤訊息是不是因無 LACP 相關定義的回應。)
所以以上只是譩測,還需持續學習才懂所以。

Categories: 架設網站

Tags:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

PHP Code Snippets Powered By : XYZScripts.com