本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負贔屓
實現目標:通過路由器配置路由路徑,將撥號獲取的公網IP地址指向局域網Ubuntu服務器。家里有兩台路由器,一台TPlink負責撥號和有線局域網(A路由),DHCP+ARP連接一台華為路由器(B路由),負責WiFi傳輸,實現SSH圖形界面、WOL遠程喚醒等功能。
一.配置A路由
(圖1)
圖1是A路由的撥號信息,公網IP地址可以作為SSH的登錄地址,也可以直接作為A路由的訪問地址(需要設定)。
(圖2)
設置轉發規則:將NAT設置為開啟狀態,在轉發規則中設置虛擬服務器進行IP地址和端口映射。由於路由器B設置的靜態IP地址是192.168.2.100,所以這里映射該IP地址,端口分別映射了122和22,其中122端口對應Ubuntu的WiFi網卡,22端口對應有線網卡。(注:之前設置的是DMZ主機,DMZ主機是將映射的主機完全暴露在廣域網中的一種全端口映射,可以實現雙向通信,所以DMZ主機安全性較差,而且,據說DMZ優先級低於虛擬服務器,有待驗證。)
(圖3)
(圖4)
MAC綁定:有兩種綁定方式:圖3為DHCP靜態地址分配&圖4為靜態ARP綁定,這里我都將B路由器的MAC地址和192.168.2.100IP進行了綁定,原因后文再說。至此,通過撥號獲取的公網IP地址+22/122端口號已經可以訪問到B路由。但是撥號獲取的公網IP是不穩定的,隨時可能發生斷線重連,所以需要進行動態DNS。
(圖5)
(圖6)
動態DNS:需要在路由器提供的DNS服務商注冊獲取賬號,圖5所示,這里TP綁定的是花生殼(新版本的TP已經自己開通了這項服務),花生殼可免費注冊殼域名,注冊成功並申請免費域名,在TP的動態DNS頁面填寫個人賬戶信息,連接狀態顯示連接成功並在下方域名信息處顯示賬戶所擁有的域名(可以擁有多個域名),以上A路由已基本設置完畢。很多人剛注冊完花生殼,看到TP顯示連接成功就訪問域名,發現訪問失敗。主要的坑有:1、花生殼並非注冊后立即可用,需要等20分鍾,而且免費域名,在花生殼域名映射服務器是需要排隊的,所以速度慢;2、由於不可知的原因,家庭寬帶的80端口是被運營商封鎖滴,圖6所示,打開TP的遠端web管理,把端口改為88,設置IP地址為255.255.255.255,如此才能通過殼域名訪問TP的管理界面,也可以通過殼域名進行SSH遠程登錄。
二、配置B路由器
如果電腦是直接連接在A路由的,可以跳過第2步,直接配置服務器即可,B路由只是一個跳轉路由。華為路由器比較坑,號稱方便易用,其實閹割了大部分的功能。只做簡單處理:
(圖7)
設置自動獲取(DHCP)IP,由於圖3和圖4中已經將WAN MAC地址進行了綁定,所以WAN IP一定是192.168.2.100,最終連接狀態如圖7。
(圖8)
設置虛擬服務器,進行NAT端口映射,這里分別將22端口和122端口映射到不同的IP地址(設置Ubuntu服務器的有線-201和無線-200網卡地址不同)。
(圖9)
靜態地址綁定,如圖8所示,開啟DHCP服務,並分別對服務器的有線及無線MAC進行靜態綁定,不知道華為是DHCP綁定還是ARP綁定,估計是DHCP。
至此B路由設置完畢,如想實現遠程管理B路由,可將B路由的80端口映射至A路由中。由於華為路由器沒有提供修改80端口的服務,所以還是省省吧。AB路由配置完畢,可以實現ssh穿透。但是如果要實現wake on lan,就要做出一些改變。
三、關於wake on lan
先討論一下關於DHCP和ARP綁定,前面A路由是通過DHCP+ARP綁定的B路由,但是遺憾,我的B路由是華為的A1路由,不支持ARP靜態地址綁定,這樣就無法wake on lan了。DHCP只是在服務器增加了一條靜態地址分配規則,但是並沒有在路由規則里進行MAC綁定,沒有綁定ARP,其他用戶還是可以通過手動配置IP的方法搶IP,另外一些一些惡意軟件和病毒還可以加進行ARP欺騙攻擊。而且wake on lan的工作機制是主機的網卡仍然保持工作,當路由器接到wake信號后,如果沒有通過ARP綁定MAC,路由器是不會把信號發送給主機的。所以為了實現wake on lan,最后還是把主機直接連接在了A路由,必須是有線連接,目前無線網卡還沒發現有支持WOL的,可能是因為功耗?
需要修改的很簡單,把主機通過有線連接A路由,並將A路由配置中綁定B路由MAC的換成綁定主機MAC即可。
四、服務器主機SSH和WOL配置
主機要實現遠程ssh和外網WOL功能(附帶一個Teamviewer),以下直接在root賬號下操作:
1、查看服務器是否安裝了ssh :ps -e | grep ssh*
安裝ssh:apt-get install ssh
2、ssh圖形界面:
修改配置服務器文件:vim /etc/ssh/ sshd_config。如圖10,ssh端口號默認22,將 X11Forwarding設置yes,UseLogin設置no,重啟ssh:進入 cd /etc/init.d目錄,執行 ./ssh restart。X11是一種面向Unix及類Unix系統的圖形界面協議。在網上看到如下的層次關系:Unix本身–>X服務器<-[通過X協議交談]->窗口管理器(綜合桌面環境)–>X應用程序。由於服務器是Ubuntu16.04,所以支持X11。
(圖10)
連接的ssh圖形界面的客戶端都是通過X11來實現連接的,Windows需要借助三方工具如Xmanager來連接(僅用Xshell是不行的),mac使用的是原生的X11,Ubuntu則需要安裝ssh客戶端 apt-get install openssh-client,在/etc/ssh/ssh_config配置文件中,找到ForwardAgent yes,ForwardX11 yes,ForwardX11Trusted yes這3個確保是yes。
mac和Ubuntu執行圖形界面連接代碼基本一致: ssh -X root@XXX.XXX.XXX.XXX,如果ssh修改了端口,可寫為ssh -X -p prot root@XXX.XXX.XXX.XXX(如果配置了路由器動態域名DNS,那么可以直接將ssh中的IP地址XXX.XXX.XXX.XXX 替換為域名)。mac在OS X版本后不再隨附X11,如有需要,可到官方網站 www.xquartz.org安裝免費版,否則無法使用ssh圖形界面。
Windows需要借助Xmanager幫助實現ssh。圖11為Windows下Xshell登錄方式,如需啟動圖形界面應用程序,則還需要點選隧道設置中的轉發X11連接(圖11-3)或者直接使用Xmanager中的Xstart(圖12)
(圖11-1、2、3)
(圖12)
據說Gnome桌面也是可以圖形傳輸的http://blog.csdn.net/jlds123/article/details/11054733,傳輸畫面很卡頓,而且目前Ubuntu大部分都默認使用unity桌面了,Gnome還需要另外安裝,所以不推薦。如果真想遠程連接桌面,不如使用teamviewer。
3、WOL(wake on lan)
WOL功能的實現是在網卡的支持下實現的,所以如果你的網卡不支持還是買個向日葵吧。
查看網卡信息:ifconfig。Linux某些版本網卡命名以不再ethX的命名規則,而是根據固件、拓撲及位置信息分配固定名稱,例如這里的eno1表示合並固件或者 BIOS 的名稱為板載設備提供索引號的名稱(可以理解為主板自帶網卡),本來還有塊無線網卡,由於不支持WOL,為防止網絡沖突已將其禁用。這里eno1的MAC地址即前文所述需要進行ARP綁定和DHCP靜態地址綁定的(圖3圖4)。
確認網卡是否支持WOL:ethtool eno1(如沒有ethtool請安裝)。如圖13,信息中出現“Supports Wake-on:pumbg Wake-on : g”則表示支持WOL。
修改配置文件:nano /etc/rc.local新增2行:
sleep 5
ethtool -s eth0 wol g
nano /etc/init.d/halt修改1行:
NETDOWN = no
(圖13)
設置BIOS開啟WOL:不同主板設置大同小異,都要實現兩步,一是找到Power電源管理或Wake on Lan等類似選項,設置Power on by PCIE為enable;第二部關閉Power電源管理等關於節能的設置。
本地軟件推薦:Windows:wake on lan (https://github.com/basildane/WakeOnLAN/releases/tag/2.11.15)如圖14
MAC:wake on lan(商店有免費版)
Android:wake on lan http://www.wandoujia.com/apps/net.mafro.android.wakeonlan
Ubuntu:命令行 apt-get install wakeonlan
參考:http://www.linuxidc.com/Linux/2012-07/64696.htm
(圖14)
4、關於TeamViewer
只介紹Ubuntu下常用命令:
teamviewer start #TeamViewer user interface (if not running).
teamviewer help #Print this help screen.
teamviewer version #Print version information.
teamviewer info #Print version, status, id.
teamviewer ziplog #Create a zip containing all teamviewer logs (useful when contacting support).
teamviewer license [show|accept] #Interactively agree or show/agree to End User License Agreement.
teamviewer setup #Configure headless modes (non-gui/console)
teamviewer passwd [PASSWD] #Set a password (useful when installing remote (ssh). 注意[]只是標注
teamviewer daemon status #Show current status of the TeamViewer daemon.
teamviewer daemon start #Start TeamViewer daemon.
teamviewer daemon stop #Stop TeamViewer daemon.
teamviewer daemon restart #Stop/Start TeamViewer daemon.
teamviewer daemon disable #Disable TeamViewer daemon - don't start daemon on system startup.
teamviewer daemon enable #Enable TeamViewer daemon - start daemon on system startup (default).
注意:若wol后想用teamviewer登錄服務器,需要使用的命令:1、teamviewer daemon start開啟teamviewer服務;2、teamviewer info查看teamviewerID信息;3、teamviewer passwd XXX將teamviewer密碼修改為XXX。在本地通過ID和密碼遠程連接teamviewer,若服務器沒有連接顯示器,則圖形界面信息可能不會傳輸過來,這時候連接teamviewer顯示的是控制台信息,解決的辦法就是給服務器加一台顯示器。
//如需有疑問可與作者私信溝通,轉載發表請注明出處,尊重作者勞動成果。