vpn客戶端源碼
㈠ 客戶端在內網的話,怎麼撥號「遠程訪問VPN」,其原理是
可以,不需要弄什麼映射,分兩種情況吧。
pptp、l2tp、ipsec都會部分修改數據包的網路層和傳輸層,所以要求接入路由器和接收路由器支持對應協議。
ssl由於只是數據部分加密,任何設備都支持。
㈡ VPN虛擬機
可以用openvpn
在虛擬機裡面的系統安裝openvpn伺服器
真實電腦外面安裝openvpn客戶端
虛擬機網卡橋接模式。
㈢ 什麼是vpn客戶端
VPN虛擬專網是利用公共網路資源為用戶構成專用網的一種業務,可被當做專網使用和管理,擁有同專有網路一樣的安全性和可管理性。VPN虛擬專網的公共網路提供了高的擴展性和靈活性,成本大大低於自建專網的情形。
㈣ 查看PPTP,L2TP,IPSec和OpenVPN的區別的源代碼
前面的 和後面的沒關系
pptp 普通的經過加密的vpn 加密的內容可以被破解
L2tp ipsec 經過加密的vpn 比pptp更強 有沒有破解就不清楚了
openvpn 國外的開源項目,有沒有被破解只有破解的人知道惡劣
㈤ 伺服器簡單,可怎麼做VPN客戶端
第一步:點擊右下角的網路圖標,然後選擇「打開網路和共享中心」,再選擇「更改適配器設置」。
第二步:在「菜單欄」點擊「文件」, 如果沒有看到菜單欄,請按下鍵盤上的Alt按鍵,即可顯示菜單欄,選擇「新建傳入連接」(這個比較的重要)。
第三步:勾選選擇允許使用VPN連接到本機的用戶,如果用戶還未創建,請點擊「添加用戶」。
選擇其他用戶連接VPN的方式,這里選擇「通過Internet」,如果你的顯示多項,請選擇正確的方式。
第四步:接著設置網路參數,如果對方連接後可以使用本地網路的DHCP伺服器,那麼可以跳過此設置。如果本地網路沒有DHCP伺服器,必須就必須設置一下,請點擊「Internet協議版本4(TCP/IP)」,點「屬性」按鈕,選擇「指定IP地址」,比如我的IP是192.168.1開頭的,那麼這里設置一個沒有被使用的IP段即可,比如從192.168.1.180到192.168.1.199。設置後請按確定,然後點擊「允許訪問」。
第五步:按照上述設置之後,其他用戶就可以利用上面的賬號以及你的IP地址利用VPN連接到你的網路了。此外,如果你有防火牆請允許1723和1701埠;如果你是內網用戶請在路由器上做1723和1701埠的映射,一般做1723就行了。還有,現在一般穩定的VPN都需要支付一些費用。
㈥ 如何在 Debian / Ubuntu 伺服器上架設 L2TP / IPSec VPN
首先解釋一個問題:在 iPhone 的 VPN 設置介面里(Settings >> General >> Network >> VPN),你可以看到三個標簽:L2TP, PPTP, IPSec。但上面我們又講本次介紹的 VPN 方式叫「L2TP / IPSec」,這兩者究竟是什麼關系?
這三個標簽確實令人混淆,准確的寫法應該是:L2TP over IPSec, PPTP, Cisco IPSec。PPTP 跟另外兩者關系不大,且大家較為熟悉,暫且不提,L2TP 和 IPSec 的區別如下。
L2TP:一個「包裝」協議,本身並不提供加密和驗證的功能。
IPSec:在 IP 數據包的層級提供加密和驗證功能,確保中間人無法解密或者偽造數據包。
本來,只用 IPSec 就可以實現 VPN,Mac OS X 和 linux 都支持。但是 Mac OS X 和 iPhone OS 都推薦使用 L2TP over IPSec,在兩者的圖形介面上也只能設置這個。L2TP / IPSec 是業界標准,微軟也支持。而只用 IPSec 的常見於 Linux-to-Linux 的應用,比如將兩個位於不同地區的辦公室網路安全地連在一起。這多是固定 IP 路由器到固定 IP 路由器級別的連接,只需保證數據包不被中途截獲或者偽造就可以,故使用 L2TP 的意義不大。L2TP / IPSec 主要是實現所謂「Road Warrior」的設置,即用變動的客戶端連固定的伺服器。
Cisco 的 VPN 用的也是 IPSec 加密,但那是一套不同於 L2TP 的私有包裝協議,用於提供用戶管理之類的功能,因此一般都需要用 Cisco 自家的 VPN 客戶端連接。iPhone / iPad 的 VPN 設置介面中的 IPSec 標簽里有 Cisco 的標識,就是這個原因。
以下是在 Ubuntu 和 Debian 主機上架設 L2TP / IPSec VPN 的步驟,一共十四步。你需要有伺服器的 root 許可權(所以 DreamHost, BlueHost, MediaTemple 這些服務供應商幫你把一切打點周到的主機就無緣了),也需要一些基本的 Linux 知識。不然的話,我們還是推薦您找一位比較熟技術的朋友幫忙。
一、安裝 IPSec。如上所述,IPSec 會對 IP 數據包進行加密和驗證。這意味著你的電腦 / 移動設備與伺服器之間傳輸的數據無法被解密、也不能被偽造。我推薦用 openswan 這個後台軟體包來跑 IPSec。
用以下命令安裝 openswan:
sudo aptitude install openswan二、用文字編輯器打開 /etc/ipsec.conf,改成這樣:
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=YOUR.SERVER.IP.ADDRESS
leftprotoport=17/1701
right=%any
rightprotoport=17/%any三、用文字編輯器打開 /etc/ipsec.secrets,改成這樣:
YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret"(別忘了把「YOUR.SERVER.IP.ADDRESS」這部分換成你的伺服器的 IP 地址,把「YourSharedSecret」部分換成隨便一個字串,例如你喜歡的一句話,等等。)
四、運行以下命令:
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done五、檢查一下 IPSec 能否正常工作:
sudo ipsec verify如果在結果中看到「Opportunistic Encryption Support」被禁用了,沒關系,其他項 OK 即可。
六、重啟 openswan:
sudo /etc/init.d/ipsec restart七、安裝 L2TP。常用的 L2TP 後台軟體包是 xl2tpd,它和 openswan 是同一幫人寫的。
運行以下命令:
sudo aptitude install xl2tpd八、用文字編輯器打開 /etc/xl2tpd/xl2tpd.conf,改成這樣:
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes這里要注意的是 ip range 一項里的 IP 地址不能和你正在用的 IP 地址重合,也不可與網路上的其他 IP 地址沖突。
九、安裝 ppp。這是用來管理 VPN 用戶的。
sudo aptitude install ppp十、檢查一下 /etc/ppp 目錄里有沒有 options.xl2tpd 這個文件,沒有的話就建一個,文件內容如下:
require-mschap-v2
ms-dns 208.67.222.222
ms-dns 208.67.220.220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4注意 ms-dns 兩行我填的是 OpenDNS。如果你想用其他的 DNS 伺服器(例如谷歌的公共 DNS),請自行更換。
十一、現在可以添加一個 VPN 用戶了。用文字編輯器打開 /etc/ppp/chap-secrets:
# user server password ip
test l2tpd testpassword *如果你之前設置過 PPTP VPN,chap-secrets 文件里可能已經有了其他用戶的列表。你只要把 test l2tpd testpassword * 這樣加到後面即可。
十二、重啟 xl2tpd:
sudo /etc/init.d/xl2tpd restart十三、設置 iptables 的數據包轉發:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward十四、因為某種原因,openswan 在伺服器重啟後無法正常自動,所以我們可以在 /etc/rc.local 文件里寫入如下語句:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart到這里,設置工作已經基本完成。你可以用 iPhone 或 iPad 試著連一下。記得在「Secret」中填入你在上述第三步里填的 YourSharedSecret。
如果連接成功,上網也沒問題的話,恭喜你,大功告成。如果連不上,恐怕還得多做一步。
Ubuntu 9.10 自帶的 openswan 版本是 2.6.22, Debian Lenny 帶的版本是 2.4.12。這兩個版本的 openswan 都有問題。我們的測試結果表明,2.6.24 版的 openswan 可以在上述兩版的 Linux 操作系統下正常工作。所以如果做完以上十四步還是連不上的話,請考慮從源碼編譯 openswan 2.6.24 :
sudo aptitude install libgmp3-dev gawk flex bison
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar xf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs
sudo make install編譯需要一段時間。你的 Linux 內核版本需要高於 2.6.6。
然後可以刪除原先通過 aptitude 安裝的 openswan,並重啟之:
sudo aptitude remove openswan
sudo /etc/init.d/ipsec restart
㈦ 通過hook connect 函數 實現 VPN功能是否可行
在android系統中,可以使用iptables控制單個應用網路訪問。在google code上有一個開源項目-droidwall就是基於iptables實現的。除了iptables可以實現控制單個應用網路訪問外,還可以通過攔截應用中的connect函數,達到控制應用訪問網路的目的。下面從幾個方面分析android應用中connect調用流程為例來實現攔截connect實現網路禁用和ip過濾。(以下分析基於4.2源碼)
1.android中網路訪問流程
1)android系統中訪問網路可以通過Socket.java、URL.java、HttpPost.java、HttpGet.java等關鍵類來訪問網路資源。通過代碼追蹤,這些類訪問網路資源最終需要通過native方式,調用linux系統下的socket函數訪問網路。在android4.2源碼中,java層訪問網路得native方法定義在源碼路徑libcore/luni/src/main/java/libcore/io/Posix.java中(4.0之前的網路系統、文件系統的native方法是獨立分開得,4.0之後組織在Posix.java中)。如下是Posix.java中的代碼片段:
public final class Posix implements Os { Posix() { } public native FileDescriptor accept(FileDescriptor fd, InetSocketAddress peerAddress) throws ErrnoException, SocketException; public native boolean access(String path, int mode) throws ErrnoException; public native void bind(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException; ...... //對應linux下的connect系統調用 public native void connect(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException;
2)Posix.java中的native方法實現源碼路徑libcore/luni/src/main/native/libcore_io_Posix.cpp文件中,native connect方法實現代碼片段如下:
taticvoidPosix_connect(JNIEnv*env,jobject,jobjectjavaFd,jobjectjavaAddress,jintport)
{
sockaddr_storagess;
if(!inetAddressToSockaddr(env,javaAddress,port,&ss))
{
return;
}
constsockaddr*sa=reinterpret_cast<constsockaddr*>(&ss);
(void)NET_FAILURE_RETRY(env,int,connect,javaFd,sa,sizeof(sockaddr_storage));
}
有上代碼可知,java層connect最終功能由linux系統connect函數實現。
2.so注入
so注入可以參考古河大哥牛逼的libInject(點擊這里訪問)。
3.攔截connect庫編寫
在connect中,獲取傳入的參數ip地址,根據需要把需要禁用的ip地址改為127.0.01.以下是我測試的攔截connect函數關鍵代碼:
intnew_connect(intsockfd,conststructsockaddr*addr,socklen_taddrlen)
{
LOGDD("HOOK
====>newconnect****************");
charip[128]={0};
intport=-1;
if(addr->sa_family==AF_INET)
{
structsockaddr_in*sa4=(structsockaddr_in*)addr;
inet_ntop(AF_INET,(void*)(structsockaddr*)&sa4->sin_addr,ip,128);
port=ntohs(sa4->sin_port);
LOGDD("AF_INETIP===>%s:%d",ip,port);
}
elseif(addr->sa_family==AF_INET6)
{
structsockaddr_in6*sa6=(structsockaddr_in6*)addr;
char*ipv6=NULL;
inet_ntop(AF_INET6,(void*)(structsockaddr*)&sa6->sin6_addr,ip,128);
ipv6=strstr(ip,"f:");
if(NULL!=ipv6)
{
strcpy(ip,ipv6+2);
}
port=ntohs(sa6->sin6_port);
LOGDD("af_inet6
IP===>%s:%d",ip,port);
}
else
{
returnold_connect(sockfd,addr,addrlen);
}
if(strcmp(ip,"115.23.20.178")==0)
{
LOGDD("%s
==>127.0.0.1",ip);
structsockaddr_inmy_addr;
intmy_len=sizeof(structsockaddr_in);
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(80);
my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
returnold_connect(sockfd,(constsockaddr*)&my_addr,sizeof(my_addr));
}
else
{
returnold_connect(sockfd,addr,addrlen);
}
}
4.攔截connect函數功效
1)禁用應用網路訪問。
2)過濾廣告ip
3)禁用定位功能