シャドウソックスを使用してLAN透過ゲートウェイを構築する

シャドウソックスを使用してLAN透過ゲートウェイを構築する

個人ユーザーの場合、ss は携帯電話や端末にインストールされますが、企業ユーザーの場合、このような構成はより面倒で、管理や保守が容易ではありません。したがって、ゲートウェイまたはイントラネット内のサーバー上で構成し、ゲートウェイを指す必要があります。

アイデア:

1.dnsmasq+China DNS+ss-tunnelはDNS汚染の問題を解決します

2. ss-redirはiptablesおよびipsetと連携して国内および海外のトラフィックを転送し、国内のウェブサイトは直接接続され、海外のウェブサイトはss-redirを経由するようにします。

ゲートウェイソリューション分析:

1. dnsmasq は主に DNS キャッシュとして機能します。DNS 要求は ChinaDNS に送信され、ChinaDNS は要求を国内の DNS サーバーと ss-tunnel に同時に送信します。ss-tunnel は ss サーバーへの中継を担当します。ss は海外では汚染されないため、ChinaDNS は 2 つの応答を受け取り、結果が汚染されているかどうかを判断します。最後に、dnsmasq は汚染されていない DNS 応答を受け取ります。

2.iptablesはipsetと連携して国内と海外のトラフィックを区別します

システム: Ubuntu 20.0

dnsmasq をインストールして設定する

1. dnsmasqをインストールする

dnsmasq をインストールします

2. 設定ファイル/etc/dnsmasq.confを変更する

解決しない
サーバー=127.0.0.1#5354

3. dnsmasqを起動する

サービス dnsmasq 開始

ChinaDNS をインストールして設定する

1. ChinaDNSの公式ドキュメントを参照する

2. ChinaDNSをダウンロード、リンク​​

wget -c https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz

コンパイル

tar -xvf chinadns-1.3.2.tar.gz && cd chinadns-1.3.2
./configure && メイク 
src/chinadns -m -p 5353 -c chnroute.txt & ###chinadns を起動できるかどうかをテストするためにのみ使用されます netstat -ntlpu ###### 起動されたポートを表示します

3. コンパイル後、実行ファイルchinadnsがsrcディレクトリに生成され、/usr/local/binにコピーされます。

cp ./src/chinadns /usr/local/bin/

4. /etc/init.d/にchinadnsというファイルを作成し、次のコードをコピーします。実行可能にするには、 ​sudo chmod +x /etc/init.d/chinadns​​​を実行することを忘れないでください。

#!/bin/sh
### 初期化情報の開始
# 提供: chinadns
# 必須開始: $network $local_fs $remote_fs $syslog
# 必須停止: $remote_fs
# デフォルト開始: 2 3 4 5
# デフォルト停止: 0 1 6
# 簡単な説明: 起動時に ChinaDNS を起動する
### INIT INFO 終了 ### デプロイパスの開始
# このファイルを /etc/init.d/ に置きます
### デプロイ終了 PathDAEMON=/usr/local/bin/chinadns
DESC=中国DNS
名前=chinadns
PIDFILE=/var/run/$NAME.pidtest -x $DAEMON || exit 0case "$1" in
  始める)
    echo -n "$DESC を開始: "
    $デーモン\
        -c /etc/chinadns/chnroute.txt \
 -m \
        -p 5354 \
 -s 114.114.114.114,127.0.0.1:5300 \
        1> /var/log/$NAME.log \
        2> /var/log/$NAME.err.log &
    エコー$!> $PIDFILE
    「$NAME」をエコーし​​ます。
    ;;
  停止)
    echo -n "$DESC を停止しています: "
    `cat $PIDFILE` を強制終了します
    rm -f $PIDファイル
    「$NAME」をエコーし​​ます。
    ;;
  再起動|強制リロード)
    $0 ストップ
    睡眠1
    0ドルからスタート
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "使用法: $N {start|stop|restart|force-reload}" >&2
    出口1
    ;;
esacexit 0

注意: 18 行目の -c /etc/chinadns/chnroute.txt には、必要に応じてパスを入力してください。

5. chinadns を起動/再起動/停止する

service chinadns start #chinadns を起動する
service chinadns restart #chinadns を再起動します
サービス chinadns 停止 #chinadns を停止

shadowsocks-libev をインストールして設定する (ss-redir と ss-tunnel を含む)

1. 詳細な手順については、公式ドキュメントを参照してください。

2. 次のコードを実行します

apt-get install ソフトウェアプロパティ共通 -y
aptリポジトリppa:max-c-lv/shadowsocks-libev -yを追加します
apt-getアップデート
apt をインストール shadowsocks-libev

3. /etc/shadowsocks-libev/config.json を設定します。111.111.111.111 を自分の VPS サーバー アドレスに置き換え、「パスワード」を自分で変更してください。

{
    "サーバー":"111.111.111.111",
    "サーバーポート":8388,
    "ローカルアドレス":"0.0.0.0",
    "ローカルポート":1080,
    "パスワード":"パスワード",
    "タイムアウト":60,
    "メソッド":"aes-256-cfb",
    "モード": "tcp_and_udp"
}

4. ss-tunnelとss-redirを起動する

/usr/bin/ss-tunnel -c /etc/shadowsocks-libev/config.json -u -l 5300 -L 8.8.8.8:53 &
/usr/bin/ss-redir -c /etc/shadowsocks-libev/config.json -b 0.0.0.0 -u &

転送を有効にする

1. /etc/sysctl.conf を変更し、コメントを解除します。

ネット.ipv4.ip_forward=1

2. コマンドを実行して有効にする

sysctl -p

iptablesとipsetを設定する

1. 国内IPアドレスのipsetを生成する

curl -sL http://f.ip.cn/rt/chnroutes.txt | egrep -v '^$|^#' > cidr_cn
###実行に失敗した場合は、cat /usr/local/src/chinadns-1.3.2/chnroute.txt | egrep -v '^$|^#' > cidr_cn を使用できます。
ipset -N cidr_cn ハッシュ:ネット
for i in `cat cidr_cn`; do echo ipset -A cidr_cn $i >> ipset.sh; 完了
chmod +x ipset.sh && sudo ./ipset.sh
rm -f ipset.cidr_cn.rules
ipset -S > ipset.cidr_cn.rules
cp ./ipset.cidr_cn.rules /etc/ipset.cidr_cn.rules

2. iptablesを設定する

iptables -t nat -N shadowsocks# 予約アドレス、プライベートアドレス、ループバックアドレスはプロキシを経由しません iptables -t nat -A shadowsocks -d 0/8 -j RETURN
iptables -t nat -A shadowsocks -d 127/8 -j リターン
iptables -t nat -A shadowsocks -d 10/8 -j リターン
iptables -t nat -A shadowsocks -d 169.254/16 -j 戻る
iptables -t nat -A shadowsocks -d 172.16/12 -j リターン
iptables -t nat -A shadowsocks -d 192.168/16 -j 戻る
iptables -t nat -A shadowsocks -d 224/4 -j リターン
iptables -t nat -A shadowsocks -d 240/4 -j RETURN# 次のIPは、プロキシを使用しないLAN内のデバイスのIPです。
iptables -t nat -A shadowsocks -s 192.168.2.10 -j RETURN# shadowsocks サーバーに送信されたデータはプロキシを経由しません。そうしないと、無限ループに陥ります。# 111.111.111.111 を ss サーバーの IP/ドメイン名に置き換えます。iptables -t nat -A shadowsocks -d 111.111.111.111 -j RETURN    
# 中国本土のアドレスはプロキシを使用しません。意味がなく、多くの労力がかかるからです。iptables -t nat -A shadowsocks -m set --match-set cidr_cn dst -j RETURN# その他のリダイレクトはすべて ss-redir リスニング ポート 1080 にリダイレクトされます (ポート番号は任意です。統一するだけです)
iptables -t nat -A shadowsocks ! -p icmp -j REDIRECT --to-ports 1080# OUTPUT チェーンにルールを追加して、shadowsocks チェーンにリダイレクトします。 iptables -t nat -A OUTPUT ! ​​-p icmp -j shadowsocks
iptables -t nat -A プリルーティング! -p icmp -j shadowsocks

デフォルトゲートウェイを設定する

透過ゲートウェイは、デフォルトのネクストホップ アドレス、つまり、データ パケットのルートを決定した後にゲートウェイがデータ パケットを送信する場所を設定する必要があります。家庭内 LAN 環境では、このネクストホップはルーターのアドレスです。

192.168.2.1 はルーターのアドレスであることに注意してください。192.168.0.1 の場合もあれば、192.168.1.1 の場合もあります。特定の設定を確認する必要があります。

p2p1はネットワークカードです。eth0の場合もあります。ifconfigで自分のネットワークカードコードを確認してください​ifconfig​

ルート del デフォルト
ルート追加デフォルトGW 192.168.2.1 p2p1

ルーターのDNSとDHCPゲートウェイを設定する

1. 透過ゲートウェイのIPアドレスが192.168.2.2であると仮定し、ルーターのDNSを192.168.2.2に設定します。

2. ルーターのDHCPサブ項目で、ルーターのイントラネットゲートウェイを192.168.2.2に設定します。

これで、shadowsocks を使用して LAN 透過ゲートウェイを構築する方法についての記事は終了です。shadowsocks を使用して透過ゲートウェイを構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux環境でのshadowsocks+polipoグローバルプロキシの設定

<<:  CSS スタイルのリセットとクリア (異なるブラウザで同じ効果を表示するため)

>>:  Vue3+Vite+TS は、要素プラスビジネスコンポーネントの二次カプセル化を実装します sfasga

推薦する

MySQLの数値型自動増分における落とし穴

テーブル構造を設計する場合、数値型は最も一般的な型の 1 つですが、数値型をうまく使用するのは想像す...

DockerとVMwareの競合を解決する

1. Dockerの起動の問題:問題は解決しました: Hyper-V をオンにする必要があります (...

Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明

目次導入Tomcatへの接続方法APR と Tomcat ネイティブtomcat で APR を使用...

MySQLでNULL値を判定する際の落とし穴事例

目次序文Mysql の case when 構文:事例実践:要約:序文今日、プログラムを開発している...

Windows Server2014 にセキュリティを適用して MySQL をインストールする際のエラーに対する完璧な解決策

理由はインストール後にきちんとアンインストールされなかったためです。この問題を解決するには、次の点に...

MySQLにログインする際のエラー「ERROR 1045 (28000)」を解決する方法

今日はサーバーにログインして、データベース内のいくつかのものを変更する準備をしました。しかし、パスワ...

MySQL クエリ ステートメントのプロセスと EXPLAIN ステートメントの基本概念とその最適化

ウェブサイトやサービスのパフォーマンスは、データベースの設計(適切な言語開発フレームワークを選択した...

MySQL 20 の高性能アーキテクチャ設計原則 (収集する価値あり)

オープンソース データベース アーキテクチャの設計原則01. 技術の選択最も使い慣れていて、最大限に...

Vueはシンプルなデータ双方向バインディングを実装します

この記事では、Vueの具体的なコード例を参考までに紹介します。具体的な内容は以下のとおりです。初心者...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...

Kali Linux インストール VMware ツールのインストール プロセスと VM インストール vmtools ボタン グレー

Xiaobai は vmtools のインストールを記録します。 1. 意義と機能: VMWARE ...

Vue3 の組み合わせ API における setup、ref、reactive の完全な使用方法

1. セットアップを始める次のコード関数を簡単に紹介します。 ref 関数を使用して変数の変更を監視...

CSSアニメーションがJSによってブロックされるかどうかについての簡単な議論

CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...

NavicatがMySQL8.0.11に接続するとエラー2059が発生する

間違いNavicat Premium を使用して MySQL に接続すると、次のエラーが発生します。...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...