目前,通過VPN來實現遠程辦公是比較常見的方法。該方法的不足之處主要有兩點:第一,若要保證VPN用戶隨時訪問內網,內網的計算機必須長時間保持開機狀態,造成大量資源的浪費;第二,用戶連入VPN之後,只能把遠程計算機當成網絡鄰居中的一員來互傳資料。
利用Linux實現遠程辦公可以彌補VPN方式的以上兩點不足:可以實現按需開機;可以直接控制和監測遠程計算機,以及遠程計算機的桌面。此方法中Linux服務器必須是連接在公網上的一台機器,它“扮演”了網關和防火牆的角色,並且負責喚醒內網的計算機。
環境配置
1.安裝wakelan軟件
wakelan是Linux下的一款遠程喚醒程序,能喚醒與Linux服務器相連的計算機,並且其網卡MAC地址為指定地址。命令格式是“wakelan MAC地址”。
wakelan的安裝方法如下:
#tar wakelan-1.1.tar.gz
#cd wakelan-1.1
#./configure
#make
#make install
2.添加廣播路由
在此實際工作環境中,局域網內的機器都通過交換機連在Linux服務器的eth1網卡上。Linux服務器要對整個局域網進行廣播,需要添加以下一條路由:
#route add -host 255.255.255.255 -dev eth1
把上面這條路由添加到/etc/rc.local中,即使Linux服務器重新啟動,也可以自動添加該路由。
3.配置DHCP
在DHCP的配置文件/etc/dhcpd.conf中指定內網Windows機器的IP地址、域服務器地址、域名、網關、DNS服務器等信息,使其啟動後可以自動獲取指定的IP。當然,如果每台計算機上都有固定的IP地址,則配置DHCP服務的過程可以忽略。
/etc/dhcpd.conf中配置的內容如下:
ddns-update-style ad-hoc;
max-lease-time -1;
default-lease-time -1;
option subnet-mask 255.255.255.0;
option broadcast-address 255.255.255.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
option domain-name "home.net.cn";
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.11 192.168.0.100;
host platinum {
hardware ethernet 00:0a:e6:a9:64:a2;
fixed-address 192.168.0.2;
}
}
上面的配置中,對名為“platinum”的PC做了指定MAC的IP分配,固定platinum的IP地址為192.168.0.2,如有其它機器,也做類似設置即可。
用命令“/etc/rc.d/init.dhcpd start”啟動DHCP服務,使DHCP可以正常運行。
4.配置iptables,設置DNAT功能
DNAT功能可以將訪問Linux網關特定端口的所有連接請求都轉到內網指定機器的相應端口上(內網用戶的連接請求除外)。
舉例如下:
#iptables -A PREROUTING -t nat -p tcp -s ! 192.168.0.0/24 --dport 4899
-j DNAT --to 192.168.0.2:4899
上例這條命令中,把訪問Linux網關4899端口的所有連接請求都轉到IP為192.168.0.2的機器的4899端口上。4899是遠程控制程序Radmin的默認服務端口。可以把這條命令添加到文件/etc/rc.local裡,使Linux啟動就自帶這個功能。用戶也可以寫一個實現同樣功能的Firewall腳本,放在/etc/rc.local裡執行。
5.在內網Windows上安裝遠程控制軟件
常用的遠程控制軟件有pcAnywhere、Radmin等,用戶可以根據自己的喜好安裝其中一個,本人使用的是Radmin。用來遠程辦公的計算機和受控制的計算機都必須安裝這個軟件,不同的是被控端除了安裝這個軟件以外,還需要啟動服務端程序。
6.遠程喚醒內網機器
遠程啟動的前提是Windows機器支持網卡喚醒,並且BIOS的設置要符合網卡喚醒標准。在任何能上網的地方用SSH方式登錄到Linux機器,執行遠程喚醒命令:
#wakelan 00:0a:e6:a9:64:a2
如果電腦啟動了,則證明前面的配置成功。要遠程登錄,用戶還必須記住一堆難記的MAC地址,這是很麻煩的,而且不安全。我們可以通過Web服務來改進這個功能。
安全、便捷的Web啟動方式
如果Linux中已經安裝了Apache和PHP,就可以通過配置Apache和編寫PHP腳本來實現更安全地遠程啟動。
1.編寫PHP腳本
在Apache的DocumentRoot下面建立一個wakeup目錄,在這個目錄下建立index.php文件,內容如下:
<?
passthru("/usr/local/bin/wakelan 00:0a:e6:a9:64:a2");
echo "計算機platinum正在啟動 . . .";
?>
現在,只要在浏覽器中輸入一個網址(事先在Apache中設置好的),比如,http://platinum.3322.org/wakup,就可以實現遠程啟動了。這樣雖然很方便,但是任何人都可以訪問,還是不安全,需要添加Apache認證來解決這個問題。
2.添加Apache認證
修改Apache的配置文檔/usr/local/apache2/conf/httpd.conf,添加如下代碼:
<Directory /usr/local/apache2/htdocs/wakeup>
AllowOverride AuthConfig
</Directory>
在wakeup目錄中建立.htAccess文件,並編輯:
#vi /usr/local/apache2/htdocs/wakeup/.htaccess
AuthName "電腦platinum啟動器"
AuthType Basic
AuthUserFile /usr/local/apache2/apache.users
require user platinum
3.創建密碼文件
接下來,就是創建一個專門用來存放密碼的文件apache.users:
root@server# htpasswd -c /usr/local/apache2/apache.users platinum
New passWord:
Re-type new password:
Adding password for user platinum
apache.users文件內的密碼被加密,修改密碼時,還是使用htpasswd命令,不帶“-c”參數即可。
要使配置生效,必須重啟Apache服務。這樣,再用http://platinum.3322.org/wakeup訪問,就會需要密碼認證了(見圖1)。不知道密碼的人是無法進入系統開啟指定計算機的。
圖1 啟動遠程計算機的認證畫面
開始遠程控制
通過以上方法遠程啟動計算機後,啟動事先裝好的遠程控制軟件,輸入Linux服務器的地址,就可以操作遠程的電腦platinum了。操作完成後,如果不再需要計算機繼續工作,可以通過遠程控制軟件關閉遠程的計算機,避免了資源浪費。
圖1 啟動遠程計算機的認證畫面
開始遠程控制
通過以上方法遠程啟動計算機後,啟動事先裝好的遠程控制軟件,輸入Linux服務器的地址,就可以操作遠程的電腦platinum了。操作完成後,如果不再需要計算機繼續工作,可以通過遠程控制軟件關閉遠程的計算機,避免了資源浪費。