[Fedora12] 開機失敗

最近遇到選完GRUB選單,然後Fedora開機卡住的問題

螢幕只剩下一個小點點 (或底線 _ ) 在那邊閃呀閃

 

 

硬體是HP dx2000mt的電腦      Intel 865GV晶片組

引用:http://lkml.indiana.edu/hypermail/linux/kernel/0308.1/1105.html
https://bugzilla.redhat.com/show_bug.cgi?id=521423

 

查到是說,是ACPI(進階電源管理)的問題

關於ACPI,這裡有他的很棒的說明

http://www.delightpress.com.tw/article_c.aspx?article_id=8

簡單說就是控制電腦在休眠待命和關機的一些電源控制
作業系統需要偵測硬體和與BIOS做溝通

如果你也是遇到這種問題,先把核心參數

rhgb quiet

這二個拿掉,才能顯示詳細的內容

 

然後嘗試加上

acpi=ht

這是針對核心有HT技術的硬體架構所開發 (Intel ICH5 APIC)
可以略過一些硬體偵測,又可以打開Hyper-threading技術

如果嘗試這個不行

只好使用這個相容性最高的參數

acpi=off

當然,在關機時不能自動軟關機

 

如果不行的話可以依序試試

acpi=noirq

pci=routeirq

pci=noacpi

acpi=noirq

pci=nomsi

 

——————————————————————————————————-

引用:http://www.cyberciti.biz/howto/question/static/linux-kernel-parameters.php

其他開機核心參數

        acpi=           [HW,ACPI] Advanced Configuration and Power Interface
                        Format: { force | off | ht | strict | noirq }
                        force — enable ACPI if default was off
                        off — disable ACPI if default was on
                        noirq — do not use ACPI for IRQ routing
                        ht — run only enough ACPI to enable Hyper Threading
                        strict — Be less tolerant of platforms that are not
                                strictly ACPI specification compliant.

 

        pci=option[,option…]  [PCI] various PCI subsystem options:
                off             [IA-32] don’t probe for the PCI bus
                bios            [IA-32] force use of PCI BIOS, don’t access
                                the hardware directly. Use this if your machine
                                has a non-standard PCI host bridge.
                nobios          [IA-32] disallow use of PCI BIOS, only direct
                                hardware access methods are allowed. Use this
                                if you experience crashes upon bootup and you
                                suspect they are caused by the BIOS.
                conf1           [IA-32] Force use of PCI Configuration
                                Mechanism 1.
                conf2           [IA-32] Force use of PCI Configuration
                                Mechanism 2.
                nosort          [IA-32] Don’t sort PCI devices according to
                                order given by the PCI BIOS. This sorting is
                                done to get a device order compatible with
                                older kernels.
                biosirq         [IA-32] Use PCI BIOS calls to get the interrupt
                                routing table. These calls are known to be buggy
                                on several machines and they hang the machine
                                when used, but on other computers it’s the only
                                way to get the interrupt routing table. Try
                                this option if the kernel is unable to allocate
                                IRQs or discover secondary PCI buses on your
                                motherboard.
                rom             [IA-32] Assign address space to expansion ROMs.
                                Use with caution as certain devices share
                                address decoders between ROMs and other
                                resources.
                irqmask=0xMMMM  [IA-32] Set a bit mask of IRQs allowed to be
                                assigned automatically to PCI devices. You can
                                make the kernel exclude IRQs of your ISA cards
                                this way.
                pirqaddr=0xAAAAA        [IA-32] Specify the physical address
                                of the PIRQ table (normally generated
                                by the BIOS) if it is outside the
                                F0000h-100000h range.
                lastbus=N       [IA-32] Scan all bus
es thru bus #N. Can be
                                useful if the kernel is unable to find your
                                secondary buses and you want to tell it
                                explicitly which ones they are.
                assign-busses   [IA-32] Always assign all PCI bus
                                numbers ourselves, overriding
                                whatever the firmware may have done.
                usepirqmask     [IA-32] Honor the possible IRQ mask stored
                                in the BIOS $PIR table. This is needed on
                                some systems with broken BIOSes, notably
                                some HP Pavilion N5400 and Omnibook XE3
                                notebooks. This will have no effect if ACPI
                                IRQ routing is enabled.
                noacpi          [IA-32] Do not use ACPI for IRQ routing
                                or for PCI scanning.
                routeirq        Do IRQ routing for all PCI devices.
                                This is normally done in pci_enable_device(),
                                so this option is a temporary workaround
                                for broken drivers that don’t call it.
                firmware        [ARM] Do not re-enumerate the bus but instead
                                just use the configuration from the
                                bootloader. This is currently used on
                                IXP2000 systems where the bus has to be
                                configured a certain way for adjunct CPUs.

 

[Fedora 12]VGA顯卡的相關顯示問題

文字模式顯示問題

引用:https://fedoraproject.org/wiki/Common_F12_bugs#Miscellaneous_problems_with_Intel_graphics_adapters

我的硬體是Intel 865GV晶片組的內建顯卡82865G

在裝fedora 12時,只要是在文字模式載入的時候(類似DOS)
螢幕就會顯示Not Supported Mode (螢幕不支援的顯示模式)
進入圖型模式後就正常了

 

原因是說Linux錯的驅動(或是沒有驅動)導致在顯示的時候出不來
(好像是VESA Driver吧,反正網路上找也沒有適合的)

解法只要在Grub選單的時侯,在Fedora (2.6.32.11-99.fc12.i686)
按下e,然後加入

nomodeset

這樣就會正常跑出loading的Bar了

修改grub.conf (或是menu.lst)

#vi /boot/grub/grub.conf

我列出我的其中一項

title Fedora (2.6.32.11-99.fc12.i686)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.32.11-99.fc12.i686 ro root=UUID=83ef3ac6-d581-4536-a6bb-6a06c9060094 noiswmd LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet nomodeset
        initrd /boot/initramfs-2.6.32.11-99.fc12.i686.img

 

版號請以你的為主,在kernel那行的最後
KEYTABLE=us rhgb quiet加上nomodeset

就OK了

——————————————————————————————–

如果想修改在文字模式的顯示解析度

可以用上述方式再加上

vga=791

代表是用1024×768的32位元全彩顯示
(迷之音:還真豪華…)

如果想相同性高一些(像我這種電腦)

在kernel那行的最後,去除rhgb quiet參數,加上

nomodeset vga=769

這樣就會有最多的資訊了(當然開機還沒進桌面前都蠻醜的)
(註:rhgb代表圖形用顯示開機情況,較美觀。而quiet代表不顯示詳細訊息)

 

以下是其他常用的解析度參數,不含括號的註解
引用:http://soft.zdnet.com.cn/software_zone/2007/1011/545493.shtml

vga=769 (640x480x256) 
vga=771 (800x600x256)
vga=788 (800x600x645536)
vga=773 (1024x768x256)
vga=791 (1024x768x65536)

 

——————————————————————————————–

沒有顯示滑鼠游標

之後又發現一個問題,就是在登入後進入桌面時,沒有顯示滑鼠游標

 

引用:http://phorum.vbird.org/viewtopic.php?f=2&t=33926&view=previous

: 在進去的藍色畫面時都還可以看到滑鼠,
: 可是當他變成登入的畫面時,滑鼠圖案消失了!!
: 滑鼠其實一直都存在,因為我有移動滑鼠亂點確實還可以點擊,
: 但是滑鼠的圖案卻都看不到,有沒有人遇到這個問題??
: 要怎樣解決這個問題呢?? 謝謝教導。

像是文章說的

我的解決辦法是在xorg.conf下改參數

但Fedora 12預設不會幫我們產生/etc/X11/xorg.conf

先執行
#Xorg -configure :1
增測硬體設備

#mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
移動設定檔到/etc/X11/xorg.conf

然後修改之

#vi /etc/X11/xorg.conf

Section “Device”
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: “True”/”False”,
### <string>: “String”, <freq>: “<f> Hz/kHz/MHz”
### [arg]: arg optional
#Option “NoAccel” # [<bool>]
#Option “SWcursor” # [<bool>]
#Option “ColorKey” # <i>
#Option “CacheLines” # <i>
#Option “Dac6Bit” # [<bool>]
#Option “DRI” # [<bool>]
#Option “NoDDC” # [<bool>]
#Option “ShowCache” # [<bool>]
#Option “XvMCSurfaces” # <i>
#Option “PageFlip” # [<bool>]
Identifier “Card0”
Driver “intel”
VendorName “Intel Corporation”
BoardName “82865G Integrated Graphics Controller”
BusID “PCI:0:2:0”

Option “NoAccel” “True”
Option “SWcursor” “True”

EndSection

 

在上述區塊加入紅色的字,然後登出再登入即可
好像每張卡的都不太一樣
像文章裡寫到

BoardName “nVidia Corporation C51 PCI Express Bridge”
下面加入這一行
Option “HWcursor” “false”
登出再登入,就行了!

我的顯卡就沒有上述說的那個參數
如果我的方法不能使用,可以試試看他的

———————————————————————————————

後記:

google到cent os 5也有這問題
http://www.samtseng.liho.tw/~samtz/blog/?p=2488
CentOS 5 滑鼠指標消失的問題
編輯 /etc/X11/xorg.conf 檔案 加入 Option “HWCursor” “off”

我的另一台電腦也裝了Fedora 12和ubuntu,也有這前者的問題
顯卡是Ati Radeon 9550

似乎有Driver,嘗試安裝中…..

[轉貼] linux使用wget透過proxy抓取檔案

  
所以在linux使用wget抓取檔案,若要透過proxy 必須如下:

vi /etc/wgetrc,找到以下兩行,並將以下參數

 #passive_ftp = off <- 是否關閉 passive mode
 #http_proxy = http://163.28.80.40:3128/ <- 設定台中區網的 proxy ip

 前面的 # 刪除後,修改為

passive_ftp = off
http_proxy=http://163.28.80.40:3128/
ftp_proxy = http://163.28.80.40:3128/
use_proxy = on

存檔後再用 wget 抓檔就會比較快了

[分享] Synergy–讓你一組鍵盤滑鼠在二台電腦間遊走

就如同標題所述,對於我這種同時使用筆電和桌電的人真的是一大福音

Synergy這個軟體,大家對他的介紹都是軟體KVM,一組鍵盤滑鼠共用多台電腦。
我對他的解釋,不如說是一個沒有畫面的遠端操控軟體。

對於一個人同時使用二台電腦時候,如美工人員或是系統管理師,這真的可以派上用場
用起來好像是延伸桌面,但是是二台電腦幫為你服務

對於正在使用Linux學習的使用者也很方便,XP下打開文章,另一邊打開Terminal,可以同時看文章和操作
文章看到的指令,複製一下,滑鼠拉過去,就可以貼到Terminal了,真的是超方便的。

 

我很久以前就有想過可以寫這種軟體,還搭配傳檔….等等(好啦離題了。)

主要特色:

  • 利用網路達到鍵盤滑鼠共用 (一台鍵盤/滑鼠操控二台電腦,前提是二台電腦都要有螢幕)
  • 剪貼簿共享 (A電腦複製,B電腦貼上)
  • 同步進入螢幕保護程式,也可以同時被喚醒(只在同OS下才適用)
  • 可以跨平台(Win7、XP、Mac、Fedora、Ubuntu、CentOS….等等的Linux)
  • 免費,自由軟體

唯一個小小的缺點,就是不能傳檔 (A電腦的檔案直接拉到B電腦),不過可以用網芳….等等方法去解決。

還有不適合一套電腦操作一台「主機」,連螢幕都沒有,或是一台電腦不在你面前(電腦在機房)
這樣的話,遠端操控軟體 (例如:XP的遠端桌面、VNC….等等)會比較適合你。


設定方法:

你插鍵盤滑鼠的那台電腦為Server,其餘為Client

以我的例子

我的電腦左邊是Fedora桌機,插著鍵盤滑鼠
右邊則是筆電

Fedora Linux的設定方法

打開Terminal打入指令

yum install synergy quicksynergy -y

等待安裝完成

在Appliccations → Internet → QuickSynergy

 Screenshot-1.png   

依畫面打入其相對位置的電腦名稱,然後按Execute

(XP的話在我的電腦右鍵→內容,在電腦名稱的頁籤裡)

Screenshot-QuickSynergy.png

防火牆記得要打開 TCP 24800 連接埠

以下是防火牆設定

System → Administration → Firewall

Screenshot-2.png

第一個對話框可以不用理他,然後打入root的密碼

 Screenshot-3.png

 

在其左邊選擇 Other Ports,右邊按下Add

把User Defined打勾,在Port / Port Range打入24800,Protocol選擇TCP,然後按OK

Screenshot-4.png

 最後按Apply存檔

 


 

XP的話直接到以下網址去下載

http://sourceforge.net/projects/synergy2/files/Binaries/1.3.1/SynergyInstaller-1.3.1.exe/download

然後安裝起來

打開Synergy,會有我類似的圖,在這個Client中打入IP位址 (也可以打Linux的HostName拉,只是比較不容易找到就是了)

 2010-05-30 14 31 48.png

然後按下Test測試看看,有

NOTE: connected to server

字樣代表連線成功,然後再滑鼠滑到螢幕邊界看看,理論上應該可以從另一台螢幕出來

Screenshot.png

這樣就成功了

 

 

 

參考資料:

http://qwweee7467.spaces.live.com/Blog/cns!A4205F53E9B9B1B4!905.entry
http://hohayo.pixnet.net/blog/post/25718509
http://blog.ssh.tw/?p=344
http://synergy2.sourceforge.net/

[linux bash] 建立格式化過的Shell Script

#!/bin/bash
#————————————
#Time:2010/05/03 22:41
#Author:Johnny
#Comment:建立一個屬於自己格式的Shell Script
#————————————

# 檢查參數是否足夠
[ “$#” -lt 1 ] && echo “ERROR: Missing arguments (less than 1).” \
        && exit 0

# 檢查檔案是否存在,不存在就建立
if [ “$(cat $1)” == ” ]; then
echo “File Created.”
else
echo “ERROR: File exist.” && exit 0
fi

# 建立其檔案內容(註:中間的註解也會被寫入,中間可以修改作者的名字)
cat > $1 <<end
#!/bin/bash
#————————————
#Time:$(date +%Y)/$(date +%m)/$(date +%d) $(date +%H):$(date +%M)
#Author:Johnny
#Comment:
#————————————
end
# 該屬性更改為可執行的檔案
chmod +x $1

我在這裡解釋一下這要怎麼用

將其存成mksh,可以直接放在/bin下

就可以直接打

$ mksh test.sh

就會有一個自己格式的shell script了

$ cat test.sh

#!/bin/bash
#————————————
#File:test.sh
#Time:2010/05/03 23:35
#Author:Johnny
#Comment:
#————————————

[Fedora12] 一些雜項設定

WindowsXP和Fedora的時間不同步

Screenshot.png 

WindowsXP和Fedora 12 linux的雙系統環境下,時間一直會不同步? 

(XP下使用正常,但切到Fedora後時間雖然正確,但回到XP後時間就會差8個小時)

http://hi.baidu.com/wyl0367/blog/item/8333cdfa0a82de9e58ee90cd.html

原因在於BIOS的時間沒有存時區,而Fedora預設會以UTC時間存到BIOS裡

「系統」→「管理」→「時間和日期」→「時區」,把UTC的勾去掉,就行了

System -> Administraton -> Date & Time

Time Zone頁籤下,System Clock uses UTC 勾勾取消


新酷音的符號輸入方法

引用:http://briian.com/?p=404

 Linux下開啟新酷音輸入法請見:http://j796160836.pixnet.net/blog/post/25444345

Screenshot-IBus Preferences-1.png  

當我們用「新酷音輸入法」在輸入中文字時,可以按一下鍵盤上左上角的「~」按鍵,便可出現剛剛設定的特殊符號選單,我們可以用鍵盤上下左右鍵來選擇想要輸入的符號。(空白鍵換頁)

建議鉤上幾個選項

自動移游標,這選項才會和新注音的感覺差不多,要刪預先字時才不會刪錯

Esc鍵清理預編區

輸入風格可以依照喜好來設定


開機自動打開Numlock

引用:http://www.linuxquestions.org/questions/fedora-35/numlock-key-turn-on-420427/

可以裝一個很簡單的套件numlockx

numlockx.i686 : NumLockX turns on NumLock after starting X

 

YUM掛Proxy下載套件

引用:http://www.fedoraforum.org/forum/showthread.php?s=&threadid=7

修改yum.conf

vi /etc/yum.conf

在裡面加入一行

http_proxy=http://strong>user:passwd@proxy.foo.com:portnumber

上述的

user為帳號,passwd為密碼,proxy.foo.com為proxy的位址,portnumber為連接埠號

  

[轉貼]XP關閉自動播放

本文轉自:http://labors3cweb.pixnet.net/blog/post/27247064
http://security.sinica.edu.tw/infosec-web/topicdetail.jsp?id=&f=7&t=562

還有其他方法可供參考,只列出最有效的方法

 

電腦管理服務設定

方法:開始->控制台->系統管理工具->服務,或 開始->我的電腦->右鍵->管理->電腦管理

停用 Shell Hardware Detection

 

電腦管理服務設定  


MountPoints2機碼編輯設定

方法 1:

開始->執行->輸入 regedit ->登錄編輯程式

找到 HKEY_CURRENT_USERSoftwareMicrosoftWindows
CurrentVersionExplorerMountPoints2,將其安全性權限加入everyone,並在「完成控制」給予拒絕的設定

MountPoints2機碼編輯設定MountPoints2機碼編輯設定 2

方法 2:

使用安裝subinacl.msi

編輯以下指令,並存為 denyauto.bat

cd C:Program FilesWindows Resource KitsTools
SublnACL /subkeyreg
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2 /deny=everyone=f

編輯以下指令,並存為 grantautu.bat

cd C:Program FilesWindows Resource KitsTools
SublnACL /subkeyreg
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2 /grant=everyone=r

執行 denyauto.bat 阻斷 autorun.inf執行。

執行 grantautu.bat 恢復 autorun.inf執行。

 

 

[轉貼]永久修改Windows系統環境變數

本文節錄自:http://demonchang.blogspot.com/2007/08/modify-system-environment-variables-on.html 

修改Windows系統環境有很多種作法,如下:

  1. 最簡單也最直接的就是利用Windows自己本身的修改方式,在桌面的”我的電腦(My Computer)”上按滑鼠右鍵→”內容(Properties)”→選擇”進階(Advanced)”的Tab→點下”環境變數(Environment Variables)”的按鈕,再找到自己要修改的環境變數上,點滑鼠左鍵兩下就可以修改了。(以上為XP使用,但其他的系統也差不多)
  2. 利用Windows內建的GUI程式修改,點下左下角的”開始(Start)”→”執行(Run)”,輸入”msconfig”,就可以利用msconfig進行修改。
  3. 利用安裝程式來進行系統環境變數的修改,可用InstallShield此類的程式來做到。
  4. 利用batch file的執行方式來修改系統環境變數,因為這就是我所選擇的方式,所以接下來會稍微介紹如何使用batch file來修改環境變數。

以往我們在利用batch file設定環境變數的時候,通常是用set這個指令來做設定,語法如下:

set 變數名稱=變數內容

但是用set所修改的環境變數內容效用範圍僅止於執行程式的DOS視窗,其他重新開啟的DOS視窗都沒有辦法取得此修改後的變數內容,更不用說其他的程式了。所以如果要永久的變更系統環境變數的話,那就只能透過修改註冊表(registry)的參數內容了。要修改的地方就是在[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]之下,有各個變數的名稱及對應的內容,只要對內容進行修改,就可以達到永久修改變數內容的結果。

以設定JAVA使用的環境變數故可以使用機碼方法,會較優
改天寫成BAT檔

至於要設定甚麼變數,可參考
http://blog.yam.com/carl44/article/19949683

[分享]終極PPT講義轉檔

  2010-04-07 11 48 22.png

印講義還在使用PowerPoint的講義模式嗎?
如何要讓你印出的PPT講義能夠一次塞更多頁且減少間距,仍夠讓字體更大更清楚
而且步驟不難,使用的軟體都是免費軟體唷

 

 

 

 

 

 

所需軟體

Adobe reader (本文是使用9.20)
看PDF都會用的軟體,這次使用其每張紙列印多頁的功能
官方下載:http://get.adobe.com/tw/reader/
軟體王下載:http://www.softking.com.tw/soft/download.asp?fid3=11064

PDF Creator (本文是使用0.99)
本文的主角,是個PDF虛擬印表機,可以以此來製作PDF轉檔
只要能以印表機出的東西,都可以利用這軟體轉成PDF

軟體說明:http://briian.com/?p=487

官方下載:http://sourceforge.net/projects/pdfcreator/files/PDFCreator/PDFCreator%200.9.9/PDFCreator-0_9_9_setup.exe/download

因部分公用電腦在安裝PDF Creator時會重開機
此時可以使用doPDF
效果一樣,建議使用PDF Creator較穩定

官方下載:http://www.software112.com/products/dopdf-free-pdf-converter+quick-download.html
軟體王下載:http://www.softking.com.tw/soft/download.asp?fid3=24555

 

請看以下教學

2010-04-07 11 31 35.png 

打開我們要的PPT檔,然後按列印

 2010-04-07 11 41 00.png

照平常列印設定一樣,只是印表機選PDF Creator,然後照圖片設定雜項設定

選項  配合紙張調整大小一定要勾,否則失去其意義 

彩色/灰階的項目有:

彩色,看到即所印
灰階,會把所有的彩度去除,據經驗,部分的文字方塊會無法顯示
黑白,去除背景只剩文字,部分的圖片會無法顯示

建議選擇彩色

選項 投影片加框是會較美觀,依個人喜好勾選

 

2010-04-07 11 43 13.png

 紙張大小:A4 列印品質:96dpi 是為了要縮小檔案大小

實驗發現,這裡修改紙張大小和列印品質的關係

雖然這裡設成 紙張大小:A6(A4的1/4部分) 列印品質:300dpi
雖然檔案會較小,但印出來字會糊糊的

 

2010-04-07 11 32 19.png

按下Save選擇欲儲存的路徑,到這步還不是完稿

 2010-04-07 11 36 52.png

結果會自動用Adobe Reader打開(如果沒有請手動開啟)

按下列印

頁面縮放選擇:每張紙列印多頁
每張列印的頁數:2×4

即是一頁印出8張投影片

列印頁面邊框就不用再勾選,否則會有二個框

頁序可以依喜好選擇水平或垂直

 

 

 

 2010-04-07 11 36 56.png

這裡設定回預設值,A4  300dpi

 

 

完成~

 

有些會碰到檔案太大而印表機印不出來,可以將 列印品質 降低試試

還有因為PDF檔案不齊全或檔案過大所以每張紙列印多頁時在PDF Creator列印時有錯誤訊息
可能牽扯到GhostScript版本的問題,我再研究看看其選項

初步知道,如果遇到字體出不來(或是被改動)可以勾選,以影像方式列印

如果遇到列印時有破圖的情形(發生在文字方塊,有透明色的圖片)可以勾選,讓印表機決定色彩

2010-04-07 12 38 35.png

如果仍舊有問題可以調動其他選項試試看

 

 

目前已知問題有  列印緩慢 (黑白雷射印表機要20秒左右才印出一張)
可能也是因品質太高的緣故 

[轉貼]詳解-OpenVPN中的routing

這文章的前半段還有看懂一些,之後的文章就不OK了
備忘起來慢慢看

網路概論我超不熟的啦>”<

 

原文出處http://cheaster.blogspot.com/2009/11/openvpnrouting.html

在網路上有很多教學,會叫你把vpn當做default-route-gateway…但,這樣很容易一失敗就造成server本身外連有問題…如果外連有問題,你想遠端修改都不行…所以,我強烈建議不熟routing是啥東東西,不要太輕易就把server本機的default-route給改掉…

以linux上來看,假設本機實體網路卡eth0使用的ip-address為[192.168.1.1/32][gateway=192.168.1.254],vpn網卡tun0/tap0使用的ip-address為[10.8.0.1/24]/p–t–p[10.8.0.2/24]=gateway,指令[route -n]=表a

表a:
dest/mask,gateway,dev
10.8.0.2/32,0.0.0.0,tun0
10.8.0.0/24,10.8.0.2,tun0
192.168.1.0/24,0.0.0.0,eth0
0.0.0.0/0,192.168.1.254,eth0

上面這一塊,有上過網路管理課程的朋友一定很了解,我就大至上講一下,routing-table就是告訴電腦的封包該往哪走…用白話一點描述就是

  1. 封包-a想去10.8.0.1~10.8.0.255的地方,必須到10.8.0.2的門口排隊
  2. 封包-b想去192.168.1.1~192.168.1.255的地方,必須到0.0.0.0的門口排隊
  3. 不想去上面二個地方,而想去別處的,就通通到192.168.1.254的門口排隊

想去的地方,就是routing-table上的dest(目的地),門口就是gateway,dev指的就是你的實體設備(電腦中叫網路卡)

所以我以vpn+nat的方式來表述一下

vpn-client[10.8.0.10/32]/tun0-vpn-server[10.8.0.1/32]/tun0-vpn-gateway[10.8.0.2/32]
eth0-實體網路[192.168.1.1/32]/eth0-實體網路-gateway[192.168.1.254/32]
表a就是這一台啟動vpn服務的routing-table

以一般我們vpn-server-conf的預設,若無特別設定的話,client端除了本身自有的網路產生的路由表(routing-table),還會因為連上vpn-service時產生的dest:10.8.0.0/24,gateway:vpn_gateway(絕對不會是10.8.0.2/32,因為vpn的gateway是vpn-service去操控的,只要你設定正常…基本上不用理)

所以到這面為止,綜合basic-setting的話,你會發現,vpn只有讓10.8.0.0/24互通而已…也就是client[10.8.0.10]可以連到server[10.8.0.0/24]…這也就是server.conf中client-to-client的用意(不過,不啟用client-to-client也會有這個routing…因為這算是vpn-lan中的default-route…client-to-client只是告訴vpn-service,client們可以互相連繫)

但我用vpn是為了可以方面連到學校內部,因為學校有一些內部的管理只能允許校內ip,所以,vpn就得配合nat的方式出去

在[OpenVPN–純架設-by ssl]的routing/nat/forward做過說明了…所以,在此我就先當做你server端的vpn-input/output/forward/nat已設定在iptables上了…接著,我就來說說怎麼設定routing-table

在server.conf中,你會看到一些用[push “xxxxxxxxxxxxxxxxxx”]的東東,這push的意思就是把後面引號中的東西設定到client去…若你在server.conf看到[xxxxxxxxxxxxxx]沒引號也沒push的話,那代表是設定在server上…以上我舉幾個例子

a—[讓vpn-client可以透過vpn的tunnel連到學校192.168.10.0/24區域]

在server.conf寫:
push “192.168.10.0 255.255.255.0”
上面的意思轉成手動寫routing-table的話就是
[route add 192.168.10.0/24 vpn_gateway dev tun0]

b—[讓vpn-client可以透過vpn的tunnel連到學校192.168.10.0/24區域,但192.168.10.5/32不希望client用vpn-tunnel]

在server.conf寫:
push “192.168.10.5 255.255.255.255 net_gateway”
push “192.168.10.0 255.255.255.0”
跟a的意思一樣,只是192.168.10.5/32特別指定不要用vpn_gateway,而照client的default_gateway走

以上兩個,只要你本身server的forward與nat在iptables設定正確的話…你可以在client用trace-route去測,正確的trace-route的表應該是

client-windows-xp
cmd<—-tracert 192.168.10.1
1 1ms 1ms 1ms —- vpn_gateway(10.8.0.1)
2 ?ms ?ms ?ms —- 192.168.1.254(server-eth0-gateway)
3 ?ms ?ms ?ms —- 192.168.10.1
當然,2跟3中間會因為你經過的網路設備而有其他的gateway會回應

如果你trace-route的第一個gateway不是vpn_gateway的話,那你最好檢查一下你client的routing-table…因為,如果你client本身所在的網路就是在192.168.10.0/24的話,基本上,應該不會走vpn_gateway
又或者你自己已有設定routing-table在client端…要記住一件事,routing-table的優先順序會從最小範圍先走<—不懂啥意思,沒關係,我再舉個例子,我假設有底下routing-table-表b,如果我現在要連1.1.1.1,1.1.2.1,1.3.1.1,4.1.1.1,1.1.1.129會怎麼走

routing-table-表b
dest,gateway
1——1.1.1.0/24,gw-a
2——1.1.1.128/25,gw-e
3——1.1.0.0/16,gw-b
4——1.0.0.0/8,gw-c
5——0.0.00/0,gw-d

1.1.1.1—->gw-a
1.1.2.1—->gw-b
1.3.1.1—->gw-c
4.1.1.1—->gw-d
1.1.1.129–>gw-e
其實重點只有1.1.1.1跟1.1.1.129…這兩是同一個class-c,為什麼1.1.1.1會走gw-a,而1.1.1.129不走gw-a而走gw-e
因為routing-table中的1—>1.1.1.0/24—>範圍是指1.1.1.0~1.1.1.255—>256
而2—->1.1.1.128/25—>範圍是指1.1.1.128~1.1.1.255—>128
routing會挑範圍小的先走…就是這意思…(不過上面的算法應該是不會把網路位址跟廣播位址算進去啦)

以上…就是小小的說明在OpenVPN中,怎麼設定server/client的路由走向…
設定的好的話,基本上可以在server把openvpn的服務多開幾個,設定多個tun/tap的虛擬網卡,server.conf也可以寫多個不同的…記得port要用不同的,然後你就可以控制什麼使用者用啥port連入vpn-server時,會走什麼樣的routing…這樣也不怕會有人偷渡…

當然,server可以多config開多,client也行…但如果你server或client是windows的,記得要手動新增vpn虛擬網卡,各設定檔之間是不能共用一個虛擬網卡的,記得,dhcp給的ip最好也自己設定一下…反正虛擬ip蠻多可以用的…

class-A->10.0.0.0/8
class-B->172.16.0.0/11
class-C->192.168.0.0/16

應該吧…不然就google查一下就行了 在網路上有很多教學,會叫你把vpn當做default-route-gateway…但,這樣很容易一失敗就造成server本身外連有問題…如果外連有問題,你想遠端修改都不行…所以,我強烈建議不熟routing是啥東東西,不要太輕易就把server本機的default-route給改掉…

以linux上來看,假設本機實體網路卡eth0使用的ip-address為[192.168.1.1/32][gateway=192.168.1.254],vpn網卡tun0/tap0使用的ip-address為[10.8.0.1/24]/p–t–p[10.8.0.2/24]=gateway,指令[route -n]=表a

表a:
dest/mask,gateway,dev
10.8.0.2/32,0.0.0.0,tun0
10.8.0.0/24,10.8.0.2,tun0
192.168.1.0/24,0.0.0.0,eth0
0.0.0.0/0,192.168.1.254,eth0

上面這一塊,有上過網路管理課程的朋友一定很了解,我就大至上講一下,routing-table就是告訴電腦的封包該往哪走…用白話一點描述就是

  1. 封包-a想去10.8.0.1~10.8.0.255的地方,必須到10.8.0.2的門口排隊
  2. 封包-b想去192.168.1.1~192.168.1.255的地方,必須到0.0.0.0的門口排隊
  3. 不想去上面二個地方,而想去別處的,就通通到192.168.1.254的門口排隊

想去的地方,就是routing-table上的dest(目的地),門口就是gateway,dev指的就是你的實體設備(電腦中叫網路卡)

所以我以vpn+nat的方式來表述一下

vpn-client[10.8.0.10/32]/tun0-vpn-server[10.8.0.1/32]/tun0-vpn-gateway[10.8.0.2/32]
eth0-實體網路[192.168.1.1/32]/eth0-實體網路-gateway[192.168.1.254/32]
表a就是這一台啟動vpn服務的routing-table

以一般我們vpn-server-conf的預設,若無特別設定的話,client端除了本身自有的網路產生的路由表(routing-table),還會因為連上vpn-service時產生的dest:10.8.0.0/24,gateway:vpn_gateway(絕對不會是10.8.0.2/32,因為vpn的gateway是vpn-service去操控的,只要你設定正常…基本上不用理)

所以到這面為止,綜合basic-setting的話,你會發現,vpn只有讓10.8.0.0/24互通而已…也就是client[10.8.0.10]可以連到server[10.8.0.0/24]…這也就是server.conf中client-to-client的用意(不過,不啟用client-to-client也會有這個routing…因為這算是vpn-lan中的default-route…client-to-client只是告訴vpn-service,client們可以互相連繫)

但我用vpn是為了可以方面連到學校內部,因為學校有一些內部的管理只能允許校內ip,所以,vpn就得配合nat的方式出去

在[OpenVPN–純架設-by ssl]的routing/nat/forward做過說明了…所以,在此我就先當做你server端的vpn-input/output/forward/nat已設定在iptables上了…接著,我就來說說怎麼設定routing-table

在server.conf中,你會看到一些用[push “xxxxxxxxxxxxxxxxxx”]的東東,這push的意思就是把後面引號中的東西設定到client去…若你在server.conf看到[xxxxxxxxxxxxxx]沒引號也沒push的話,那代表是設定在server上…以上我舉幾個例子

a—[讓vpn-client可以透過vpn的tunnel連到學校192.168.10.0/24區域]

在server.conf寫:
push “192.168.10.0 255.255.255.0”
上面的意思轉成手動寫routing-table的話就是
[route add 192.168.10.0/24 vpn_gateway dev tun0]

b—[讓vpn-client可以透過vpn的tunnel連到學校192.168.10.0/24區域,但192.168.10.5/32不希望client用vpn-tunnel]

在server.conf寫:
push “192.168.10.5 255.255.255.255 net_gateway”
push “192.168.10.0 255.255.255.0”
跟a的意思一樣,只是192.168.10.5/32特別指定不要用vpn_gateway,而照client的default_gateway走

以上兩個,只要你本身server的forward與nat在iptables設定正確的話…你可以在client用trace-route去測,正確的trace-route的表應該是

client-windows-xp
cmd<—-tracert 192.168.10.1
1 1ms 1ms 1ms —- vpn_gateway(10.8.0.1)
2 ?ms ?ms ?ms —- 192.168.1.254(server-eth0-gateway)
3 ?ms ?ms ?ms —- 192.168.10.1
當然,2跟3中間會因為你經過的網路設備而有其他的gateway會回應

如果你trace-route的第一個gateway不是vpn_gateway的話,那你最好檢查一下你client的routing-table…因為,如果你client本身所在的網路就是在192.168.10.0/24的話,基本上,應該不會走vpn_gateway
又或者你自己已有設定routing-table在client端…要記住一件事,routing-table的優先順序會從最小範圍先走<—不懂啥意思,沒關係,我再舉個例子,我假設有底下routing-table-表b,如果我現在要連1.1.1.1,1.1.2.1,1.3.1.1,4.1.1.1,1.1.1.129會怎麼走

routing-table-表b
dest,gateway
1——1.1.1.0/24,gw-a
2——1.1.1.128/25,gw-e
3——1.1.0.0/16,gw-b
4——1.0.0.0/8,gw-c
5——0.0.00/0,gw-d

1.1.1.1—->gw-a
1.1.2.1—->gw-b
1.3.1.1—->gw-c
4.1.1.1—->gw-d
1.1.1.129–>gw-e
其實重點只有1.1.1.1跟1.1.1.129…這兩是同一個class-c,為什麼1.1.1.1會走gw-a,而1.1.1.129不走gw-a而走gw-e
因為routing-table中的1—>1.1.1.0/24—>範圍是指1.1.1.0~1.1.1.255—>256
而2—->1.1.1.128/25—>範圍是指1.1.1.128~1.1.1.255—>128
routing會挑範圍小的先走…就是這意思…(不過上面的算法應該是不會把網路位址跟廣播位址算進去啦)

以上…就是小小的說明在OpenVPN中,怎麼設定server/client的路由走向…
設定的好的話,基本上可以在server把openvpn的服務多開幾個,設定多個tun/tap的虛擬網卡,server.conf也可以寫多個不同的…記得port要用不同的,然後你就可以控制什麼使用者用啥port連入vpn-server時,會走什麼樣的routing…這樣也不怕會有人偷渡…

當然,server可以多config開多,client也行…但如果你server或client是windows的,記得要手動新增vpn虛擬網卡,各設定檔之間是不能共用一個虛擬網卡的,記得,dhcp給的ip最好也自己設定一下…反正虛擬ip蠻多可以用的…

class-A->10.0.0.0/8
class-B->172.16.0.0/11
class-C->192.168.0.0/16

應該吧…不然就google查一下就行了