我們可以使Vpn服務器在Android上運行嗎?
是的,我們可以在Android上運行VPN服務器,但不能沒有root用戶。常規Android不支持VPN服務器,甚至客戶端也不支持許多協議,因此您必須安裝第三方應用程序。有類似Servers Ultimate
提供VPN服務器的應用程序,但我尚未測試。CLI使生活變得簡單:
- 構建openvpn靜態二進製文件並複製到
/system/bin
。 創建一個基本的服務器配置文件:
### /etc/openvpn/server.conf # basic configuration port 69 proto udp dev tun mode server tls-server keepalive 10 120 # dynamic IP pool server 10.8.0.0 255.255.255.0 # send RESTART command to clients if tunnel is restarted (UDP) explicit-exit-notify 1 # configure like a "traditional" broadcast-based network topology subnet push "topology subnet" # send all traffic from client to VPN push "redirect-gateway def1 bypass-dhcp" # DNS nameservers push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" # certificates and keys to use ca ca.crt cert server.crt key server.key dh dh2048.pem tls-crypt tc.key # cipher algorithm to use for encryption cipher AES-256-CBC # log files log /data/media/0/openvpn.log status /data/media/0/openvpn-status.log verb 3 # do not recreate TUN interface on reset (SIGUSR1) persist-tun # do not reread key files on reset (SIGUSR1) persist-key
創建服務器密鑰和證書。
tc.key
可以通過執行創建openvpn --genkey --secret tc.key
。ca.crt
,server.key
,server.crt
並且dh2048.pem
使用的是內置EasyRSA。在Linux / Windows PC上可以輕鬆完成,而在Android上則需要付出額外的努力:~$ easyrsa init-pki ~$ easyrsa build-ca ~$ easyrsa build-server-full server nopass ~$ easyrsa gen-dh
將配置文件,證書和密鑰複製到
/etc/openvpn/
並設置權限:~# chmod 0600 /etc/openvpn/{ca.crt,dh2048.pem,server.crt,server.key,tc.key} ~# chmod 0644 /etc/openvpn/server.conf ~# chmod 0755 /system/bin/openvpn ~# chown -R 0.0 /etc/openvpn /system/bin/openvpn
使用EasyRSA以相同的方式構建客戶端密鑰和證書:
~$ easyrsa --days=30 build-client-full client nopass
複製的內容
ca.cert
,client.key
,client.crt
和tc.key
客戶端配置文件。如果要從互聯網或本地(WiFi /熱點)IP地址連接,還請添加Android設備的公共IP地址:### client.ovpn client dev tun auth-nocache verb 3 remote-cert-tls server cipher AES-256-CBC pull resolv-retry infinite remote <IP_ADDRESS> 69 udp nobind connect-retry 5 5 connect-timeout 10 # only for Windows #block-outside-dns <ca> INSERT_HERE </ca> <cert> INSERT_HERE </cert> <key> INSERT_HERE </key> <tls-crypt> INSERT_HERE </tls-crypt>
Android完全忽略
main
表格,創建自定義規則並插入路由:~# ip rule add table 5000 priority 5000 ~# ip route add 10.8.0.0/24 dev tun0 table 5000 ~# ip route add 192.168.43.0/24 dev wlan0 table 5000 ~# ip route add default dev rmnet_data1 table 5000
rmnet_data1
連接到移動數據的接口在哪裡,wlan0
WiFi或熱點在哪裡。根據您的設備調整接口名稱和網絡地址。設置轉發和源NAT:
~# echo -n 1 >/proc/sys/net/ipv4/ip_forward ~# iptables -I FORWARD -i tun+ -j ACCEPT ~# iptables -I FORWARD -o tun+ -j ACCEPT ~# iptables -t nat -I POSTROUTING -o rmnet_data1 -j MASQUERADE
運行服務器,但由於Android與Linux的不同,首先進行一些小的調整:
~# mkdir /dev/net ~# ln -s /dev/tun /dev/net/tun ~# openvpn --cd /etc/openvpn/ --config server.conf
導入client.ovpn
任何OpenVPN客戶端應用程序(在Android / Windows / Linux上)並進行連接。
您可以在服務器上進行高級配置,可以將其作為Androidinit
服務運行,也可以隨心所欲。
留言
張貼留言