OPNsense配置Hysteria教程

Hysteria 是一个功能丰富的,专为恶劣网络环境进行优化的网络工具(双边加速),比如卫星网络、拥挤的公共 Wi-Fi、连接外围服务器等。 基于修改版的 QUIC 协议。新版本支持在FreeBSD系统上进行部署,并支持以下代理形式:

  • SOCKS5 代理 (TCP & UDP)
  • HTTP/HTTPS 代理
  • TCP/UDP 转发
  • TCP/UDP TPROXY 透明代理 (Linux)
  • TCP REDIRECT 透明代理 (Linux)
  • TUN (Windows 下为 TAP)

接下来介绍在OPNsense22.7.6上配置Hysteria,并使用tun接口进行策略路由的方法。为防止DNS污染,使用mosdns解析域名。

一、服务器配置

以运行Ubuntu 20.04 LTS系统为例,服务器端的配置如下:

1、创建并进入Hysteria程序存放的文件夹

mkdir hy
cd hy

2、下载Hysteria

注意:请到官方更新下载地址。也可以用Winscp等工具上传到指定目录。

wget https://github.com/HyNetwork/hysteria/releases/download/v1.3.0/hysteria-linux-amd64

3、设置执行权限

chmod 755 hysteria-linux-amd64

4、生成私钥

openssl ecparam -genkey -name prime256v1 -out ca.key

5、生成证书:

openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/CN=bing.com"

6、转发端口范围到指定监听端口9999

从1.3.0 版本开始,Hysteria 加入了多端口/端口范围地址的支持,客户端可以在指定端口范围内自动跳跃,解决了长时间单端口UDP连接容易被运营商封锁/QoS的问题。

# IPv4

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :9999

#IPv6

ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :9999

7、服务端配置

用vi编辑工具在当前目录新建一个config.json配置文件,代码如下:

注意,从1.这里的端口可以自定义,建议使用不常见的端口号。

{
"listen": ":9999",
"cert": "/root/hy/ca.crt",
"key": "/root/hy/ca.key",
"obfs": "password"
}

8、开放端口访问:

通过apt软件管理器安装UFW。

apt update
apt install ufw

执行以下命令,开放访问端口:

ufw allow 9999/udp

9、运行服务端

nohup ./hysteria-linux-amd64 server > hysteria.log 2>&1 &

提示:也可以使用一键脚本来安装,点击这里了解安装方法,注意这个脚本需要注册域名。也可以使用下面的脚本,不需要域名,但只支持debian系统。

wget https://raw.githubusercontent.com/lanhebe/hysteria/master/onekey_installHysteria.sh && chmod +x onekey_installHysteria.sh && ./onekey_installHysteria.sh

二、mosdns配置

1、创建Workers

注册cloudflare账号并登陆,点最左边的Workers(不需要域名),创建服务,名称dns1,点快速编辑,进入编辑模式,全选删除所有内容,粘贴附件worker-dns1中的代码。

继续创建服务,名称dns2,点快速编辑,粘贴附件worker-dns2中的代码。

2、修改配置文件

回到wokers,记录两个workers的域名。修改附件dns文件夹下的config.yaml文件,替换120行和122行对应域名。

三、OPNsense配置

1、禁用OPNsense的DNS解析

由于使用mosdns进行解析,所以必须禁用防火墙的DNS解析功能。

禁用DNSMASQ DNS。

禁用UNBOUND DNS。

2、上传文件

使用finalshell软件连接pfSense,下载最新版的基于FreeBSD系统的hysteria和mosdns程序,替换本文后面附件中的对应文件。将dns和vpn文件夹上传到/root目录,并赋予程序执行权限。

chmod +x /root/dns/mosdns
chmod +x /root/vpn/vpn

3、运行客户端

启动hysteria客户端。

nohup /root/vpn/vpn -c /root/vpn/vpn1.json

注意:配置文件vpn.json必须包含tun接口名称。从1.30版本开始,支持多端口跳跃,服务器端口可以填写一个指定范围,如下所示:

{
"server": "xxx.xxx.xxx.xxx:20000-50000",
"protocol": "udp",
"obfs": "password",
"up_mbps": 500,
"down_mbps": 1000,
"insecure": true,
"tun": {
"name": "tun_vpn1",
"timeout": 300, 
"mtu": 1500,
},
}

4、添加tun接口

导航到接口>分配,添加tun接口并分配IP,IP地址不能与LAN接口网络冲突。该接口不需要添加防火墙规则。

接口分配一个静态IP地址:

5、添加接口网关

导航到系统>网关,在该VPN1接口上添加网关,网关地址不能与接口地址相同。选中禁用网关监控。

6、添加GeoIP别名

根据官方使用说明,需要先注册一个GeoLite2帐号,登录后,点击左侧的管理许可证密钥,生成一个新的API密钥。

用生成的注册码,替换下面地址的红字部分:

https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=My_License_key&suffix=zip

将修改后的地址填入防火墙>别名>Geoip设置的网址栏,点击应用。

下载完成后,回到防火墙>别名,添加一个Geoip地址别名,内容选中国。

7、设置策略路由

在防火墙的lan接口,设置三条规则,第一条,放行DNS所使用的默认端口,走默认网关。第二条,访问国内地址走默认网关,目标选前面添加的别名。第三条,其他地址走代理网关,高级选项里的网关选VPN1。

注意,为了避免环回环,对VPS的访问要走本地网关;如果配置了Zerotier或Tailscale,也需要将远程局域网设置为走本地网关,不走VPN出站。

8、运行MOSDNS

打开另一个shell窗口,运行以下命令启动mosdns。客户端网关、DNS设置为防火墙的LAN接口地址,测试网络访问情况。

/root/dns/mosdns start -c /root/dns/config.yaml -d /root/dns/

9、添加开机启动项

根据官方说明,可以在/usr/local/etc/rc.syshook.d/start目录下添加启动脚本,也可以直接在/usr/local/etc/rc.syshook.d/start/20-freebsd文件中添加脚本:

# run mosdns
ping -c 3 127.1
nohup /root/dns/mosdns start -c /root/dns/config.yaml -d /root/dns/ >/dev/null 2>&1 &
# run hysteria
ping -c 4 127.1
nohup /root/vpn/vpn -c /root/vpn/vpn1.json > /dev/null 2>&1 &
ping -c 5 127.1
ifconfig tun_vpn1 10.0.0.1 netmask 0xffffffff

10、重启防火墙

重启防火墙,检查脚本运行是否正常。

11、测试

重启后检查各项配置是否正常,客户端测试网络访问是否正常。

软件下载:mosdns   hysteria

配置文件示例下载:附件 解压密码:pfschina.org