在pfSense安装部署Hysteria(一)部分,介绍了Hysteria服务器搭建、pfSense配置和客户端浏览器的代理设置。本篇介绍pfSense配置tun接口进行策略路由,并使用mosdns防止DNS污染的方法。
一、服务器搭建
与第(一)部分完全相同,略。
二、mosdns配置
1、创建Workers
注册cloudflare账号并登陆,点最左边的Workers(不需要域名),创建服务,名称dns1,点快速编辑,进入编辑模式,全选删除所有内容,粘贴附件worker-dns1中的代码。
继续创建服务,名称dns2,点快速编辑,粘贴附件worker-dns2中的代码。
2、修改配置文件
回到wokers,记录两个workers的域名。修改附件dns文件夹下的config.yaml文件,替换120行和122行对应域名。
三、pfSense配置
1、禁用pfSense的DNS解析
由于使用mosdns进行解析,所以必须禁用防火墙的DNS解析功能。
2、上传文件
使用finalshell工具连接到pfsense,下载最新版的hysteria和mosdns,替换本文附件当中的对应程序。将dns和vpn文件夹上传到/root目录,安装bash,赋予mosdns和vpn程序执行权限。
pkg install bash chmod +x /root/dns/mosdns chmod +x /root/vpn/vpn
3、运行客户端
启动hysteria客户端,每个服务器一条运行命令。运行后,不能Ctrll+C中断,可以退出shell再运行第二条命令。
nohup /root/vpn/vpn -c /root/vpn/vpn1.json nohup /root/vpn/vpn -c /root/vpn/vpn2.json
注意:配置文件vpn.json必须包含tun接口名称。从1.30版本开始,支持多端口跳跃,服务器端口可以填写一个指定范围,减少某一端口长期使用被运营商Qos阻断的可能。如下所示:
{ "server": "xxx.xxx.xxx.xxx:20000-50000", "protocol": "udp", "obfs": "password", "up_mbps": 1000, "down_mbps": 1000, "insecure": true, "tun": { "name": "tun_vpn1", "timeout": 300, "mtu": 1500, }, }
4、启用tun接口
导航到接口>分配,添加tun接口并分配IP,IP地址不能与LAN接口网络冲突。该接口不需要添加防火墙规则。
5、添加接口网关
导航到系统>路由管理,添加tun网关,网关地址与接口地址相同。
为了避免重启后出现网关不在线的假象(实际上并不影响正常使用),可以在这里禁用网关监控(示例图未禁用)。也可以防火墙启动完成后,对VPN接口禁用再启用一次,即可恢复网关监控。
添加另一个接口网关,并创建故障转移网关组。
6、添加别名
导航到防火墙>别名管理>网址,添加中国大陆IP地址别名。类型选网址表,选好更新周期。测试列表:https://github.com/17mon/china_ip_list/blob/master/china_ip_list.txt
7、设置策略路由
在防火墙的lan接口,添加一条规则,协议选any,源选择要策略路由的主机或别名(或any,允许所有客户端)。目标选中反转匹配,选择单个主机或别名,输入前面创建的中国大陆IP别名:CHINAIP。高级选项的网关选择前面添加的vpn网关或网关组。
注意:DNS、VPS服务器地址也应走默认网关出站。
8、运行MOSDNS
打开另一个shell窗口,运行命令启动mosdns。客户端网关、DNS设置为防火墙的LAN接口地址,测试国内外网络访问是否正常。
/root/dns/mosdns start -c /root/dns/config.yaml -d /root/dns/
确保在shell窗口能正常跑码。
9、添加开机启动项
将下面的命令添加到shellcmd当中,每行一条命令。
ping -c 3 127.1
nohup /root/dns/mosdns start -c /root/dns/config.yaml -d /root/dns/ >/dev/null 2>&1 &
ping -c 4 127.1
nohup /root/vpn/vpn -c /root/vpn/vpn1.json > /dev/null 2>&1 &
nohup /root/vpn/vpn -c /root/vpn/vpn2.json > /dev/null 2>&1 &
ping -c 5 127.1
ifconfig tun_vpn1 10.0.0.1 netmask 0xffffffff
ifconfig tun_vpn2 10.0.0.2 netmask 0xffffffff
或者在/usr/local/etc/rc.d/目录下添加脚本,新建一个vpn.sh文件,并赋予该文件执行权限,程序将在开机时自动执行。文件内容如下:
#!/bin/sh # run hysteria and mosdns ping -c 3 127.1 nohup /root/dns/mosdns start -c /root/dns/config.yaml -d /root/dns/ >/dev/null 2>&1 & ping -c 4 127.1 nohup /root/vpn/vpn -c /root/vpn/vpn1.json > /dev/null 2>&1 & nohup /root/vpn/vpn -c /root/vpn/vpn2.json > /dev/null 2>&1 & ping -c 5 127.1 ifconfig tun_vpn1 10.0.0.1 netmask 0xffffffff ifconfig tun_vpn1 10.0.0.2 netmask 0xffffffff
二选一即可。
9、测试
重启防火墙,使用命令nslookup分别测试baidu.com和google.com解析是否正常,打开浏览器访问国内、国外的网站,检查代理分流是否正常。
存在的问题:由于使用的大陆白名单,所有的国外地址全部走VPS出站,下载国外资源时,受VPS带宽的限制,下载的速度会受到影响。
解决办法是使用国外黑名单来排除,即黑名单地址才走国外VPS出站,但目前没找到黑名单对应的IP地址更新列表,且黑名单大都使用了base64进行加密。
重启防火墙后,如果启用了网关监控,则VPN网关并不会显示在线,这并不影响使用。可以禁用再启用一下接口即可恢复网关监控。
感谢群友老D提供技术指导。
配置文件示例下载:附件 解压密码:pfschina.org