shownb / shownb.github.com

shownb.github.io
shownb.github.io
5 stars 1 forks source link

搞一个debian的路由器来全局上网 #23

Open shownb opened 6 years ago

shownb commented 6 years ago

设备orangePi zero,装了debian,有一个无线网卡,一个有线网卡。让无线网卡拨号某个vpn,然后有线网卡做网关,接交换机之类,全局上网。

orangePi Zero的设置如下。无线网卡为wlan0,有线网卡为eth0

#设置eth0的ip
sudo ip addr add 10.0.0.1/24 dev eth0
#所有数据走wlan0
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
#拨号vpn后,所有数据走tun0 
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
nano /etc/sysctl.conf 
#加入转发 net.ipv4.ip_forward = 1
sysctl -p 

配置dnsmasq,做到即插即用,不需要再自己设置IP网关等。 interface= eth0 #interface 名称 bind-interfaces dhcp-range= 10.0.0.100,10.0.0.200,24h #应该和上面分配的 ip 地址和子网掩码相符 dhcp-option = 6, 8.8.8.8,8.8.4.4 # DNS 地址

以下是openvpn配置部分。 服务器

sudo apt-get update
sudo apt-get install openvpn easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
#特别要注意是export KEY_NAME="server"
#其他默认
cd ~/openvpn-ca
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret keys/ta.key
#等等等
#拷贝到/etc/openvpn目录
cd ~/openvpn-ca/keys
sudo cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn

sudo nano /etc/openvpn/server.conf server.conf内容如下

port 1194
proto tcp
dev tun
ca ca.crt
cert EasyBox.crt
key EasyBox.key
dh dh2048.pem
server 10.18.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 114.114.115.115"
tls-auth ta.key
key-direction 0
cipher AES-128-CBC
auth SHA256
duplicate-cn
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

启动服务啦

sudo systemctl start openvpn@server iptables -t nat -A POSTROUTING -s 10.18.0.0/24 -o eth0 -j MASQUERADE 看看状态 systemctl status openvpn@server

把客户端的也生成好

cd ~/openvpn-ca
source vars
./build-key client1

客户端设置 apt-get install openvpn sudo openvpn --config client1.ovpn 即可以上网 client1.ovpn生成请看https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-16-04

参考文章 https://gist.github.com/snakevil/7d7af1d8ca2c739e3fedc5b15eb8e4aa 使用树莓派3B打造超强路由之二:初成 https://blog.wolftankk.com/2011/10/18/use-debian-for-route/ 使用debian做路由网关 https://www.cnblogs.com/Security-Darren/p/4576731.html Ubuntu 设置NAT共享网络(命令行方法) https://my.oschina.net/u/1982421/blog/301274?p=%7B%7BcurrentPage+1%7D%7D 在 Cubieboard 上搭建 SoftAP 热点,并通过 OpenVPN 科学上网 https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-16-04 How To Set Up an OpenVPN Server on Ubuntu 16.04 https://www.gaojinan.com/vps-openvpn-china-telecom-unicom-mobile-mianliu-ml.html 在VPS上搭建OpenVPN实现移动联通电信三网免流

shownb commented 5 years ago

之前写过一篇类似的文章,是利用PPTP + iptables + redsocks,但由于新版IOS上已经不支持PPTP了,所以这里面就换用IPSec来实现。 新版的gost也已经支持透明代理,redsocks也可以省去了,所以理论上这种方法要比之前的简单许多。

首先安装IPSec VPN服务,网上有人已经写了个自动化脚本,就不用我们费心再一步一步安装了:https://github.com/hwdsl2/setup-ipsec-vpn

再把透明代理跑起来:

gost -L redirect://:12345 -F http2://SERVER_IP:443?ping=30

若要避免DNS污染,可以再利用DNS转发:

gost -L udp://:1053/8.8.8.8:53?ttl=5 -L redirect://:12345 -F http2://SERVER_IP:443?ping=30

剩下的就是iptables了,修改/etc/iptables.rules文件,在nat中增加:

-A PREROUTING -i eth+ -p udp --dport 53 -j DNAT --to LOCAL_IP:1053 -A PREROUTING -p tcp -j REDSOCKS

-A OUTPUT -p tcp -j REDSOCKS -A REDSOCKS -d 0.0.0.0/8 -j RETURN -A REDSOCKS -d 10.0.0.0/8 -j RETURN -A REDSOCKS -d 127.0.0.0/8 -j RETURN -A REDSOCKS -d 169.254.0.0/16 -j RETURN -A REDSOCKS -d 192.168.0.0/16 -j RETURN -A REDSOCKS -d 224.0.0.0/4 -j RETURN -A REDSOCKS -d 240.0.0.0/4 -j RETURN -A REDSOCKS -d SERVER_IP -j RETURN -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

上面看上去是不是还是挺麻烦的,其实还有一种更简单的办法,就是利用端口转发,将VPN直接映射到本地:

gost -L udp://:500/SERVER_IP:500 -L udp://:4500/SERVER_IP:4500 -L udp://:1701/SERVER_IP:1701 -F http2://SERVER_IP:443

这样本地就不用安装配置任何东西就可以作为VPN服务了。