#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 ルールを追加 [参考をお勧めします]#
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
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 クライアントの設定方法を示します。
以下は 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