Openswan Porting to Pronghorn-Metro 實務經驗分享 05
在上一次的最後,我們總算將這隻難纏的天鵝給移植到版子上了,接下來,會一帆風順嗎??(我好希望這答案是肯定句唷 ... )
首先,來參考一下官方網頁的設定步驟:
http://wiki.openswan.org/index.php/Openswan/Configure
首先,來看看自己身上的金鑰
# ipsec showhostkey --left
結果,當然找不到金鑰囉,哼,那就自己產生吧。
# ipsec newhostkey --output /etc/ipsec.secrets
恩,好像有點久ㄟ,畢竟只是版子,運算能力差了點,RSA 又是很需要運算的動作,先去作其他事吧...。天真的我真的去處理其他工作上的事了。幾個小時以後... 「甚麼,還沒算完,到底怎麼了??」嵌入式系統在爛也不是這樣的吧!!於是一氣之下,去看看到底他程式是怎麼寫得...
openswan/programs/rsasigkey/rsasigkey.c
33 #ifndef DEVICE
34 #define DEVICE "/dev/random"
35 #endif
恩... /dev/random ... 嗎... 思緒飄回過去。那年,我還是甚麼都不懂得研究生,一個叫做「小龍」的學長正在研究室完版子,那時候他正在 porting 一個叫做 dropbear 的 SSH Server (附帶一題,這是嵌入式系統常見的 SSH Server,跟常見的 Openssh 比起來輕巧多了)
小龍:阿,總算搞定了
我:不過就是 porting 一個伺服器上去啊,怎麼能讓學長這麼鬆了一口氣(我真是不知天高地厚)
小龍:是早就上版子了啦,但一直不知道為甚麼會卡住,剛剛才解決。
我:卡住?
小龍:對啊,就是程式執行就會停在那邊。找到理由就很簡單了。聽好了, Linux 底下是透過 /dev/random 去取得 random number,而 /dev/random 會收集系統的 interrupt 來作為產生亂數的 seed。你想想看之前你用 putty key gen 來產生憑證的時候,他是不是有要你敲鍵盤嗎?那也是同樣的意思。而在 Linux 底下,如果他覺得他無法產生「數學上夠完美」的亂數,整個系統就會停在那裡,等到收集到足夠的熵。
我:如果是這樣的話,那照理來說 Openssh 也有同樣的問題啊,可是我在家裡的 Linux Server 卻重來沒遇到這件事情,何解?
小龍:你在家裡使用的是 Fedora 對吧(不要懷疑,我研究所的時候真的是 RH 的支持者),那種 distribution 在開機的時候早就做了一堆事情,也為系統累計了足夠的亂渡了,但是 uclinux 沒這麼複雜 ... 所以無法收集足夠的亂度。
我:那要怎麼辦呢?
小龍:/dev/urandom ...
感謝小龍學長~不然天曉得我要研究多久...稍微紀錄了一下,請參考下面的內容:
/dev/random v.s. /dev/urandom
解決方案:
mv /dev/random /dev/random_bak
ln -s /dev/urandom /dev/random
於是,順利的產生出 Host Keys. 然後,為了順利執行 ipsec,也安裝了一些需要的工具。所需要的 ipsec.conf 如下:
conn mswitch
....left=192.168.8.227
....leftid=@123.mswitch
....leftsubnet=172.16.0.0/24
....leftrsasigkey= xxx (不告訴你)
....leftnexthop=192.168.8.228
....right=192.168.8.228
....rightid=@456.mswitch
....rightsubnet=10.0.0.0/24
....rightrsasigkey= yyy (不告訴你)
....auto=add
一切都很順利...於是...執行吧
才怪~又遇到問題了呢 ... 那麼,下回再見囉~
Porting 的紀錄又翻過了一頁~
首先,來參考一下官方網頁的設定步驟:
http://wiki.openswan.org/index.php/Openswan/Configure
首先,來看看自己身上的金鑰
# ipsec showhostkey --left
結果,當然找不到金鑰囉,哼,那就自己產生吧。
# ipsec newhostkey --output /etc/ipsec.secrets
恩,好像有點久ㄟ,畢竟只是版子,運算能力差了點,RSA 又是很需要運算的動作,先去作其他事吧...。天真的我真的去處理其他工作上的事了。幾個小時以後... 「甚麼,還沒算完,到底怎麼了??」嵌入式系統在爛也不是這樣的吧!!於是一氣之下,去看看到底他程式是怎麼寫得...
openswan/programs/rsasigkey/rsasigkey.c
33 #ifndef DEVICE
34 #define DEVICE "/dev/random"
35 #endif
恩... /dev/random ... 嗎... 思緒飄回過去。那年,我還是甚麼都不懂得研究生,一個叫做「小龍」的學長正在研究室完版子,那時候他正在 porting 一個叫做 dropbear 的 SSH Server (附帶一題,這是嵌入式系統常見的 SSH Server,跟常見的 Openssh 比起來輕巧多了)
小龍:阿,總算搞定了
我:不過就是 porting 一個伺服器上去啊,怎麼能讓學長這麼鬆了一口氣(我真是不知天高地厚)
小龍:是早就上版子了啦,但一直不知道為甚麼會卡住,剛剛才解決。
我:卡住?
小龍:對啊,就是程式執行就會停在那邊。找到理由就很簡單了。聽好了, Linux 底下是透過 /dev/random 去取得 random number,而 /dev/random 會收集系統的 interrupt 來作為產生亂數的 seed。你想想看之前你用 putty key gen 來產生憑證的時候,他是不是有要你敲鍵盤嗎?那也是同樣的意思。而在 Linux 底下,如果他覺得他無法產生「數學上夠完美」的亂數,整個系統就會停在那裡,等到收集到足夠的熵。
我:如果是這樣的話,那照理來說 Openssh 也有同樣的問題啊,可是我在家裡的 Linux Server 卻重來沒遇到這件事情,何解?
小龍:你在家裡使用的是 Fedora 對吧(不要懷疑,我研究所的時候真的是 RH 的支持者),那種 distribution 在開機的時候早就做了一堆事情,也為系統累計了足夠的亂渡了,但是 uclinux 沒這麼複雜 ... 所以無法收集足夠的亂度。
我:那要怎麼辦呢?
小龍:/dev/urandom ...
感謝小龍學長~不然天曉得我要研究多久...稍微紀錄了一下,請參考下面的內容:
/dev/random v.s. /dev/urandom
解決方案:
mv /dev/random /dev/random_bak
ln -s /dev/urandom /dev/random
於是,順利的產生出 Host Keys. 然後,為了順利執行 ipsec,也安裝了一些需要的工具。所需要的 ipsec.conf 如下:
conn mswitch
....left=192.168.8.227
....leftid=@123.mswitch
....leftsubnet=172.16.0.0/24
....leftrsasigkey= xxx (不告訴你)
....leftnexthop=192.168.8.228
....right=192.168.8.228
....rightid=@456.mswitch
....rightsubnet=10.0.0.0/24
....rightrsasigkey= yyy (不告訴你)
....auto=add
一切都很順利...於是...執行吧
才怪~又遇到問題了呢 ... 那麼,下回再見囉~
Porting 的紀錄又翻過了一頁~
留言
張貼留言