ROUTE: route addition failed
1)報FlushIpNetTable failed on interface錯誤
應對:以管理員身份運行OpenV-P-N
2)報Warning: route gateway is not reachable on any active network adapters錯誤
應對:以管理員身份運行cmd,執行:
netsh int ip reset logfile.txt
netsh winsock reset catalog
然后重啟機器
3)報ROUTE: route addition failed using CreateIpForwardEntry: 至少有一個參數不正確
應對:配置文件中增加:
route-method exe
route-delay 2
Server使用的配置文件server.conf
#申明本機使用的IP地址,也可以不說明 ;local a.b.c.d #申明使用的端口,默認1194 port 1194 #申明使用的協議,默認使用UDP,如果使用HTTP proxy,必須使用TCP協議 ;proto tcp proto udp #申明使用的設備可選tap和tun,tap是二層設備,支持鏈路層協議。 #tun是ip層的點對點協議,限制稍微多一些,本人習慣使用TAP設備 dev tap ;dev tun #OpenV-P-N使用的ROOT CA,使用build-ca生成的,用於驗證客戶是證書是否合法 ca ca.crt #Server使用的證書文件 cert server.crt #Server使用的證書對應的key,注意文件的權限,防止被盜 key server.key # This file should be kept secret #CRL文件的申明,被吊銷的證書鏈,這些證書將無法登錄 crl-verify v-p-n-crl.pem #上面提到的生成的Diffie-Hellman文件 dh dh1024.pem #這是一條命令的合集,如果你是OpenV-P-N的老用戶,就知道這條命令的來由 #這條命令等效於: # mode server #OpenV-P-N工作在Server模式,可以支持多client同時動態接入 # tls-server #使用TLS加密傳輸,本端為Server,Client端為tls-client # # if dev tun: #如果使用tun設備,等效於以下配置 # ifconfig 10.8.0.1 10.8.0.2 #設置本地tun設備的地址 # ifconfig-pool 10.8.0.4 10.8.0.251 #說明OpenV-P-N使用的地址池(用於分配給客戶),分別是起始地址、結束地址 # route 10.8.0.0 255.255.255.0 #增加一條靜態路由,省略下一跳地址,下一跳為對端地址,這里是: 10.8.0.2 # if client-to-client: #如果使用client-to-client這個選項 # push “route 10.8.0.0 255.255.255.0″ #把這條路由發送給客戶端,客戶連接成功后自動加入路由表,省略了下一跳地址: 10.8.0.1 # else # push “route 10.8.0.1″ #否則發送本條路由,這是一個主機路由,省略了子網掩碼和下一跳地址,分別為: 255.255.255.255 10.8.0.1 # # if dev tap: #如果使用tap設備,則等效於以下命令 # ifconfig 10.8.0.1 255.255.255.0 #配置tap設備的地址 # ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客戶端使用的地址池,分別是起始地址、結束地址、子網掩碼 # push “route-gateway 10.8.0.1″ #把環境變量route-gateway傳遞給客戶機 # server 10.8.0.0 255.255.255.0 #等效於以上命令 #用於記錄某個Client獲得的IP地址,類似於dhcpd.lease文件, #防止OpenV-P-N重新啟動后“忘記”Client曾經使用過的IP地址 ifconfig-pool-persist ipp.txt #Bridge狀態下類似DHCPD的配置,為客戶分配地址,由於這里工作在路由模式,所以不使用 ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 #通過OpenV-P-N Server往Client push路由,client通過pull指令獲得Server push的所有選項並應用 ;push “route 192.168.10.0 255.255.255.0″ ;push “route 192.168.20.0 255.255.255.0″ #OpenV-P-N啟動后,在OpenV-P-N Server上增加的路由,OpenV-P-N停止后自動刪除 ;route 10.9.0.0 255.255.255.252 #Run script or shell command cmd to validate client #virtual addresses or routes. 具體查看manual ;learn-address ./script #其他的一些需要PUSH給Client的選項 # #使Client的默認網關指向OpenV-P-N,讓Client的所有Traffic都通過OpenV-P-N走 ;push “redirect-gateway” #DHCP的一些選項,具體查看Manual ;push “dhcp-option DNS 10.8.0.1″ ;push “dhcp-option WINS 10.8.0.1″ #如果可以讓OpenV-P-N Client之間相互訪問直接通過OpenV-P-N程序轉發, #不用發送到tun或者tap設備后重新轉發,優化Client to Client的訪問效率 client-to-client #如果Client使用的CA的Common Name有重復了,或者說客戶都使用相同的CA #和keys連接OpenV-P-N,一定要打開這個選項,否則只允許一個人連接OpenV-P-N ;duplicate-cn #NAT后面使用OpenV-P-N,如果OpenV-P-N長時間不通信,NAT Session可能會失效, #導致OpenV-P-N連接丟失,為防止之類事情的發生,keepalive提供一個類似於ping的機制, #下面表示每10秒通過OpenV-P-N的Control通道ping對方,如果連續120秒無法ping通, #認為連接丟失,並重新啟動OpenV-P-N,重新連接 #(對於mode server模式下的OpenV-P-N不會重新連接)。 keepalive 10 120 #上面提到的HMAC防火牆,防止DOS攻擊,對於所有的控制信息,都使用HMAC signature, #沒有HMAC signature的控制信息不予處理,注意server端后面的數字肯定使用0,client使用1 tls-auth ta.key 0 # This file is secret #對數據進行壓縮,注意Server和Client一致 comp-lzo #定義最大連接數 ;max-clients 100 #定義運行OpenV-P-N的用戶 user nobody group nobody #通過keepalive檢測超時后,重新啟動OpenV-P-N,不重新讀取keys,保留第一次使用的keys persist-key #通過keepalive檢測超時后,重新啟動OpenV-P-N,一直保持tun或者tap設備是linkup的, #否則網絡連接會先linkdown然后linkup persist-tun #定期把OpenV-P-Nn的一些狀態信息寫到文件中,以便自己寫程序計費或者進行其他操作 status OpenV-P-N-status.log #記錄日志,每次重新啟動OpenV-P-N后刪除原有的log信息 log /var/log/OpenV-P-N.log #和log一致,每次重新啟動OpenV-P-N后保留原有的log信息,新信息追加到文件最后 ;log-append OpenV-P-N.log #相當於debug level,具體查看manual verb 3
把server.conf文件保存到/etc/OpenV-P-N目錄中,並把使用easy-rsa下的腳本什成的key都復制到/etc/OpenV-P-N目錄下,命令如下:
# cd /etc/OpenV-P-N
# cp easy-rsa/keys/ca.crt .
# cp easy-rsa/keys/server.crt .
# cp easy-rsa/keys/server.key .
# cp easy-rsa/keys/dh1024.pem .
# cp easy-rsa/keys/ta.key .
# cp easy-rsa/keys/v-p-ncrl.pem .
創建OpenV-P-N啟動腳本,可以在源代碼目錄中找到,在sample-scripts目錄下的open-v-p-n.init文件,將其復制到/etc/init.d/目錄中,改名為OpenV-P-N
然后運行:
# chkconfig –add OpenV-P-N
# chkconfig OpenV-P-N on
立即啟動OpenV-P-N
# /etc/init.d/OpenV-P-N start
接下來配置客戶端的配置文件client.conf:
Linux或Unix下使用擴展名為.conf Windows下使用的是.ov-p-n,並把需要使用的keys復制到配置文件所在目錄ca.crt elm.crt elm.key ta.key
# 申明我們是一個client,配置從server端pull過來,如IP地址,路由信息之類“Server使用push指令push過來的” client #指定接口的類型,嚴格和Server端一致 dev tap ;dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # 使用的協議,與Server嚴格一致 ;proto tcp proto udp #設置Server的IP地址和端口,如果有多台機器做負載均衡,可以多次出現remote關鍵字 remote 61.1.1.2 1194 ;remote my-server-2 1194 # 隨機選擇一個Server連接,否則按照順序從上到下依次連接 ;remote-random # 始終重新解析Server的IP地址(如果remote后面跟的是域名), # 保證Server IP地址是動態的使用DDNS動態更新DNS后,Client在自動重新連接時重新解析Server的IP地址 # 這樣無需人為重新啟動,即可重新接入OpenV-P-N resolv-retry infinite # 在本機不邦定任何端口監聽incoming數據,Client無需此操作,除非一對一的OpenV-P-N有必要 nobind # 運行OpenV-P-N用戶的身份,舊版本在win下需要把這兩行注釋掉,新版本無需此操作 user nobody group nobody #在Client端增加路由,使得所有訪問內網的流量都經過OpenV-P-N出去 #當然也可以在Server的配置文件里頭設置,Server配置里頭使用的命令是 # push “route 192.168.0.0 255.255.255.0″ route 192.168.0.0 255.255.0.0 # 和Server配置上的功能一樣如果使用了chroot或者su功能,最好打開下面2個選項,防止重新啟動后找不到keys文件,或者nobody用戶沒有權限啟動tun設備 persist-key persist-tun # 如果你使用HTTP代理連接OpenV-P-N Server,把Proxy的IP地址和端口寫到下面 # 如果代理需要驗證,使用http-proxy server port [authfile] [auth-method] # 其中authfile是一個2行的文本文件,用戶名和密碼各占一行,auth-method可以省略,詳細信息查看Manual ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # 對於無線設備使用OpenV-P-N的配置,看看就明白了 # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # Root CA 文件的文件名,用於驗證Server CA證書合法性,通過easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一個文件 ca ca.crt # easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客戶使用不同的keys修改以下兩行配置並使用他們的keys即可。 cert elm.crt key elm.key # Server使用build-key-server腳本什成的,在x509 v3擴展中加入了ns-cert-type選項 # 防止OpenV-P-N client使用他們的keys + DNS hack欺騙OpenV-P-Nclient連接他們假冒的OpenV-P-NServer # 因為他們的CA里沒有這個擴展 ns-cert-type server # 和Server配置里一致,ta.key也一致,注意最后參數使用的是1 tls-auth ta.key 1 # 壓縮選項,和Server嚴格一致 comp-lzo # Set log file verbosity. verb 4
OpenV-P-N服務器添加下發路由項目等參數:
高級選項中的內容: push "route 192.168.21.0 255.255.255.0";mute 10;comp-lzo;
內網客戶端若需和OpenV-P-N客戶端通訊,需要手動添加路由。
例如:在 /etc/sysconfig/static-routes 文件中增加如下內容:
any net 192.168.21.80/48 gw 192.168.21.6
在線掩碼計算工具: http://tool.chinaz.com/Tools/subnetmask
在linux下設置永久路由的方法:
1.在/etc/rc.local里添加
方法:
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254
route add –net 180.200.0.0 netmask 255.255.0.0 gw 10.200.6.201 dev eth0 metric 1
route add:命令關鍵字,表示增加路由,若要刪除路由,則為route del;
-host/-net:表示路由目標是主機還是網段;
netmask:表示路由目標為網段時才會使用到,表示路由目標網段的子網掩碼;
gw:命令關鍵字,后面跟下一跳網關;
dev:命令關鍵字,后面跟具體設備名,表示路由是從該設備出去。
metric:為路由指定所需越點數的整數值(范圍是 1 ~ 9999),它用來在路由表里的多個路由中選擇與轉發包中的目標地址最為匹配的路由。所選的路由具有最少的躍點數。躍點數能夠反映躍點的數量、路徑的速度、路徑可靠性、路徑吞吐量以及管理屬性。
2.在/etc/sysconfig/network里添加到末尾
方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev
3./etc/sysconfig/static-routes :
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129
如果在rc.local中添加路由會造成NFS(網絡文件系統,是FreeBSD支持的文件系統中的一種,它允許網絡中的計算機之間通過TCP/IP網絡共享資源)無法自動掛載問題,所以使用static-routes的方法是最好的。無論重啟系統和service network restart 都會生效
以下是解決NFS問題的描述:
按照linux啟動的順序,rc.local里面的內容是在linux所有服務都啟動完畢,最后才被執行的,也就是說,這里面的內容是在netfs之后才被執行的,那也就是說在netfs啟動的時候,服務器上的靜態路由是沒有被添加的,所以netfs掛載不能成功。 而且,如果你重啟了網絡服務器,那么路由就失效了,這個時候你不得不重新加載這個文件了。
static-routes文件又是什么呢,這個是network腳本執行時調用的一個文件,這個文件的放置在/etc/sysconfig目錄下,在network腳本中的位置是:
# Add non interface-specific static-routes.
if [ -f /etc/sysconfig/static-routes ]; then
grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
/sbin/route add -$args
done
fi
從這段腳本可以看到,這個就是添加靜態路由的方法,static-routes的寫法是
any net 192.168.0.0/16 gw 網關ip
這樣的話,在啟動network腳本的時候路由就自動添加上了,又因為network是在netfs前面啟動的,自然在掛載nfs的時候就正常了。
這樣看來,如果需要添加靜態路由,使用static-routes文件要比使用rc.local好,而且當改變了網絡配置,需要重啟network腳本的 時候,相應的靜態路由是可以自動添加上的,但這時如果使用rc.local的話,在重啟network服務的時候,原本添加好的靜態路由就消失了。
=================== End