#2023年10月9日更新
- 增加IPV6設定
UDP 限速#
三大運營商對 UDP 的阻斷 & 限速肯定是存在的,至少有 QoS 限制,剛開始還以為南方聯通比較寬容,沒想都是一丘之貉,我遇見的是阻斷,具體表現為 “連續下載或跑大流量3分鐘左右,就直接阻斷,大概再過幾分鐘又恢復連接
“,這些限制一般只是單個端口。本篇博文就來說說如何設置 Hysteria2 端口跳躍,以對抗運營商的阻斷和限速。
搭建 Hysteria 2#
關於 Hysteria2 節點的搭建,可以參考上一期《Hysteria2 & VLESS-gRPC-uTLS-REALITY 對比測試》
配合 Iptables 實現端口跳躍#
按照 Hysteria 官網的說法,Hysteria 服務端並不能同時監聽多個端口,因此不能在服務器端使用上面的格式作為監聽地址。建議配合 iptables 的 DNAT 將端口轉發到服務器的監聽端口。 [來源]
下面就以我的 Hysteria 2 來演示:端口 5353 端口跳躍 20000-50000
安裝 iptables-persistent#
apt install iptables-persistent
一直 YES&ENTER
IPV4 設定#
清空默認規則 & 自定義規則#
iptables -F
iptables -X
允許本地訪問#
iptables -A INPUT -i lo -j ACCEPT
開放 SSH 端口 (默認 22)#
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
開放 HTTP / HTTPS 端口#
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
開放 UDP 端口(5353 替換為自己 Hysteria 的監聽端口)#
iptables -A INPUT -p udp --dport 5353 -j ACCEPT
開放 UDP 端口跳躍範圍(端口範圍為 20000-50000)#
iptables -A INPUT -p udp --dport 20000:50000 -j ACCEPT
允許接受本機請求之後的返回數據#
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
其他入站一律禁止#
iptables -P INPUT DROP
允許所有出站#
iptables -P OUTPUT ACCEPT
查看開放的端口#
iptables -L
添加 NAT 規則 [建議參考]#
將匹配到的 UDP 數據包的目標端口在 20000 到 50000 之間的數據包,重定向到本地服務器的 5353 端口
iptables -t nat -A PREROUTING -p udp --dport 20000:50000 -j DNAT --to-destination :5353
查看 NAT 規則#
iptables -t nat -nL --line
IPV6 設定#
清空默認規則 & 自定義規則#
ip6tables -F
ip6tables -X
允許本地訪問#
ip6tables -A INPUT -i lo -j ACCEPT
開放 SSH 端口 (默認 22)#
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
開放 HTTP / HTTPS 端口#
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
開放 UDP 端口(5353 替換為自己 Hysteria 的監聽端口)#
ip6tables -A INPUT -p udp --dport 5353 -j ACCEPT
開放 UDP 端口跳躍範圍(端口範圍為 20000-50000)#
ip6tables -A INPUT -p udp --dport 20000:50000 -j ACCEPT
允許接受本機請求之後的返回數據#
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
其他入站一律禁止#
ip6tables -P INPUT DROP
允許所有出站#
ip6tables -P OUTPUT ACCEPT
查看開放的端口#
ip6tables -L
添加 NAT 規則 [建議參考]#
將匹配到的 UDP 數據包的目標端口在 20000 到 50000 之間的數據包,重定向到本地服務器的 5353 端口
ip6tables -t nat -A PREROUTING -p udp --dport 20000:50000 -j DNAT --to-destination :5353
查看 NAT 規則#
ip6tables -t nat -nL --line
保存 iptables 規則#
netfilter-persistent save
如果你填寫錯誤,可以使用以下命令刪除 iptables 規則
刪除 iptables 規則#
刪除指定的 NAT 規則:
iptables -t nat -D PREROUTING <行號>
刪除所有 NAT 規則:
iptables -t nat -F
# 刪除所有規則
sudo ip6tables -F
# 刪除 INPUT 鏈中的所有規則
sudo ip6tables -F INPUT
# 刪除 INPUT 鏈中的第一個規則
sudo ip6tables -D INPUT 1
# 禁用 INPUT 鏈中的第一個規則
sudo ip6tables -I INPUT 1 -j DROP
服務器配置文件#
自備域名版#
cat << EOF > /etc/hysteria/config.yaml
listen: :5353 #監聽端口
#使用CA證書
acme:
domains:
- www.igeekbb.com #你的域名,需要先解析到服務器ip
email: [email protected]
#使用自簽證書
#tls:
# cert: /etc/hysteria/server.crt
# key: /etc/hysteria/server.key
auth:
type: password
password: 123456 #設置認證密碼
masquerade:
type: proxy
proxy:
url: https://bing.com #偽裝網址
rewriteHost: true
EOF
無域名自簽版#
生成自簽證書#
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=bing.com" -days 36500 && sudo chown hysteria /etc/hysteria/server.key && sudo chown hysteria /etc/hysteria/server.crt
cat << EOF > /etc/hysteria/config.yaml
listen: :5353 #監聽端口
#使用CA證書
#acme:
# domains:
# - www.igeekbb.com #你的域名,需要先解析到服務器ip
# email: [email protected]
#使用自簽證書
tls:
cert: /etc/hysteria/server.crt
key: /etc/hysteria/server.key
auth:
type: password
password: 123456 #設置認證密碼
masquerade:
type: proxy
proxy:
url: https://bing.com #偽裝網址
rewriteHost: true
EOF
這裡展示 PassWall 客戶端的填法
以下是 Iptables 卸載步驟
卸載 Iptables#
1、停止 iptables 服務#
sudo systemctl stop iptables
2、禁用 iptables 服務#
sudo systemctl disable iptables
3、卸載 iptables 軟件包#
Debian 系統#
sudo apt-get remove iptables
CentOS 系統#
sudo yum remove iptables
4、刪除 iptables 配置文件 & 規則
sudo rm -r /etc/iptables/
sudo iptables -F
sudo iptables -X
資料參考: https://github.com/TinrLin/sing-box_-tutorial/tree/main/Hysteria2