banner
Geek

Geek

🧠在家居士 | 🥦素食者 | 🏃🏻马拉松爱好者 | 📡AI降临派 | 过🪜技术资深学者 | 🤖科技狂 | 📤更新狂🆅 https://www.igeekbb.com/
twitter
github

QoSのブロックと制限速度に対抗する Hysteria2 ポートジャンプ設定

#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

image

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 ルールを追加 [参考をお勧めします]#

20000 から 50000 の間のターゲットポートを持つ UDP パケットを、ローカルサーバーの 5353 ポートにリダイレクトします。

iptables -t nat -A PREROUTING -p udp --dport 20000:50000 -j DNAT --to-destination :5353
NAT ルールを確認#
iptables -t nat -nL --line

image

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 ルールを追加 [参考をお勧めします]#

20000 から 50000 の間のターゲットポートを持つ UDP パケットを、ローカルサーバーの 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 #偽装URL
    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 #偽装URL
    rewriteHost: true
EOF

ここでは PassWall クライアントの設定方法を示します。

image


以下は 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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。