~ ルートリスト

~ ルートリスト

過去 1 か月間、この問題を解決できず、さまざまな iptables ルールを作成し、カーネルのモジュールを有効または無効にしましたが、結果は同じで、さらに多くのパケットが iptables によってドロップされました。これにより、仮想マシン上の 192.168.1.0/24 から 192.168.3.0/28 までのさまざまな共有フォルダーにアクセスしようとすると、ユーザーが 3/5 秒の遅延が発生します。

ログに次のように表示されます:

2月14日 13:53:02 ns129115 カーネル: [12426815.202643] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=61932 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0
2月14日 13:53:02 ns129115 カーネル: [12426815.393379] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61933 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0
2月14日 13:53:02 ns129115 カーネル: [12426815.834944] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61934 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0
2月14日 13:53:02 ns129115 カーネル: [12426815.835219] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61935 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0
2月14日 13:53:19 ns129115 カーネル: [12426832.829664] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=vnet0 PHYSOUT=eth2 MAC=70:85:c2:4f:14:c1:00:16:3e:ea:18:01:08:00 SRC=192.168.1.156 DST=192.168.1.125 LEN=319 TOS=0x00 PREC=0x00 TTL=128 ID=16660 DF PROTO=TCP SPT=49169 DPT=54820 WINDOW=256 RES=0x00 ACK PSH URGP=0
2月14日 13:53:39 ns129115 カーネル: [12426852.496117] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29023 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0
2月14日 13:53:49 ns129115 カーネル: [12426862.856776] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:90:2b:34:b0:20:a4:08:00 SRC=192.168.1.237 DST=192.168.1.156 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=1644 DF PROTO=TCP SPT=49244 DPT=49169 WINDOW=1879 RES=0x00 ACK URGP=0
2月14日 13:53:50 ns129115 カーネル: [12426863.288983] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29069 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0
2月14日 13:54:19 ns129115 カーネル: [12426892.906806] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:74:d4:35:6a:18:7a:08:00 SRC=192.168.1.199 DST=192.168.1.156 LEN=248 TOS=0x00 PREC=0x00 TTL=128 ID=13244 DF PROTO=TCP SPT=49678 DPT=49169 WINDOW=256 RES=0x00 ACK PSH URGP=0
2月14日 13:54:42 ns129115 カーネル: [12426915.939242] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61969 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0

iptables と 2 つのブリッジを備えた Debian サーバー

  • BR0は、ゲートウェイ192.168.1.1へのインターネットアクセスを備えたブリッジであり、すべてのユーザーはこのネットワーク上にいます。
  • 2番目のブリッジであるVIRBR10、vm1は、IP 192.168.3.12(192.168.3.0/28)でこのブリッジに接続されており、br0を通過する外部へのiptablesによるNATを持っています。

こちら »» ゲートウェイとハイパーバイザーを備えたネットワーク グラフ

これが私のルートテーブルです

~ ルートリスト

カーネル IP ルーティング テーブル
宛先ゲートウェイ Genmask フラグ メトリック参照 Iface の使用
デフォルト 192.168.1.1 0.0.0.0 UG 0 0 0 br0
192.168.1.0 * 255.255.255.0 U 0 0 0 br0
192.168.3.0 * 255.255.255.240 U 0 0 0 virbr10

~ brctl ショー

ブリッジ名 ブリッジID STP対応インターフェース
br0 8000.0cc47ac18d3c はい eth2
virbr10 8000.525400c4b847 はい virbr10-ダミー
                                                        vnet2

~ iptables ルール

#!/bin/sh
#すべてのルールをフラッシュする
iptables -P 入力を受け入れる
iptables -P 転送 受け入れ
iptables -P 出力を受け入れる
iptables -t nat -F
iptables -t マングル -F
iptables -F
iptables -X

# 基本的な INPUT トラフィックを許可します。
iptables -A 入力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT
iptables -A 入力 -i lo -j 受け入れ
iptables -A 入力 -p icmp --icmp-type 8 -m conntrack --ctstate 新規 -j 受け入れる
iptables -A 入力 -p icmp -m conntrack --ctstate 新規 -j 受け入れる

#
#MTU
iptables -t mangle -A FORWARD -o virbr1 -p tcp -m tcp --tcp-flags SYN、RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1460
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN、RST SYN -j TCPMSS --clamp-mss-to-pmtu

#SMB
#ポート: netbios - 445/tcp
#ポート: netbios-ns – 137/udp -- NETBIOS 名前サービス
#ポート: netbios-dgm – 138/udp -- NETBIOS データグラム サービス
#ポート: netbios-ssn – 139/tcp -- NETBIOS セッション サービス
iptables -A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 445 -j 受け入れる
iptables -A 入力 -p udp -m udp --dport 445 -j 受け入れる
iptables -A 入力 -p udp -m udp --dport 137:138 -j 受け入れる
iptables -A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 139 -j 受け入れる
#iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 137 -j 受け入れる
#iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 138 -j 受け入れる
#iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 139 -j 受け入れる

#RDP
#ポート: 3389
# 外部からの接続
iptables -I 転送 -o virbr10 -d 192.168.3.12 -j 受け入れ
iptables -t nat -I PREROUTING -p tcp --dport 3589 -j DNAT --to 192.168.3.12:3389

# ローカルサブネットをマスカレードする
iptables -I 転送 -o virbr10 -d 192.168.3.0/28 -j 受け入れ
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -j マスカレード
iptables -A FORWARD -o virbr10 -m state --state RELATED,ESTABLISHED -j ACCEPT
#virbr10 から red 192.168.1.0/24 への接続を許可
iptables -A FORWARD -i virbr10 -o br0 -j ACCEPT
iptables -A FORWARD -o virbr10 -i br0 -j ACCEPT
iptables -A FORWARD -i virbr10 -o lo -j ACCEPT

###
#KVM ルーティングゲスト
# VM に送信される DHCP パケットにはチェックサムがありません (長年のバグのため)。
iptables -t mangle -A POSTROUTING -o virbr10 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fil

# これらの予約済みアドレス ブロックにマスカレードしないでください。
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 224.0.0.0/24 -j 戻る
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 255.255.255.255/32 -j 戻る
# VM から LAN/インターネットに送信されるすべてのパケットをマスカレードします。
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p tcp -j MASQUERADE --to-ports 1024-65535
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p udp -j MASQUERADE --to-ports 1024-65535
iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -j マスカレード

# SSH 接続を受け入れます。
iptables -A 入力 -p tcp -m tcp --syn -m conntrack --ctstate 新規 --dport 22 -j 受け入れる

# Radmin を受け入れる
iptables -A 入力 -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 4899 -j 受け入れる

# プライベートサブネットへの受信トラフィックを許可します。
iptables -A FORWARD -d 192.168.3.0/28 -o virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT
#7218-12_07 デスクアクセスが遅い iptables -A FORWARD -d 192.168.1.0/24 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#7218-12_07 デスクアクセスが遅い iptables -A FORWARD -d 192.168.3.0/28 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# プライベートサブネットからの送信トラフィックを許可します。
iptables -A FORWARD -s 192.168.3.0/28 -i virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT
#7218-12_07 デスクアクセスが遅い iptables -A FORWARD -s 192.168.1.0/24 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#7218-12_07 デスクアクセスが遅い iptables -A FORWARD -s 192.168.3.0/28 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# 仮想マシン間のトラフィックを許可します。
iptables -A FORWARD -i virbr10 -o virbr10 -j ACCEPT
# その他はすべて拒否します。
iptables -A FORWARD -i virbr10 -j REJECT --reject-with icmp-port-unreachable
# VM からの DNS (ポート 53) および DHCP (ポート 67) パケットを受け入れます。
iptables -A 入力 -i virbr10 -p udp -m udp -m マルチポート --dports 53,67 -j 受け入れる
iptables -A 入力 -i virbr10 -p tcp -m tcp -m マルチポート --dports 53,67 -j 受け入れる

#ICMP
iptables -A 出力 -p icmp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# その他はすべて拒否します。
iptables -A 入力 -m conntrack --ctstate 無効 -j ドロップ
iptables -A 入力 -p tcp -m tcp -j 拒否 --拒否-tcp-リセット
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable

#ログパケットがドロップされました
iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4
iptables -A 出力 -m 制限 --limit 2/分 -j ログ --log-prefix "IPTables-出力-ドロップ: " --log-level 4

アップデート

  1. ログチェーンをスクリプトの最後に変更し、新しいログエントリを貼り付けます

答え1

Googleで検索したら解決できました。

  1. Windows Server 2012 R2 のドメイン コントローラーで SMB を使用して共有ファイルにアクセスする速度が遅いのは、フォルダーが宛先に存在しない場合に、フォルダー リダイレクト GPO がリダイレクト プロセス中にユーザー プロファイル フォルダーのアクセス許可を変更するためです。Microsoft Technet の iamrafic に基づきます (リンク)、フォルダの権限を次のように変更する必要があります。

必要な場所にフォルダーを作成します。適切なボタンをクリックして、親からのアクセス許可の継承を無効にし、継承されたすべてのアクセス許可を削除します。DACL には、Local Administrators というエントリが既に存在します。

ローカル管理者の変更: フルコントロール: このフォルダ、サブフォルダ、およびファイル

SYSTEM: フルコントロール: このフォルダー、サブフォルダー、およびファイルを追加します。

CREATOR OWNER を追加します: フル コントロール: このフォルダー、サブフォルダー、およびファイル。

認証済みユーザーの追加: フォルダーの一覧表示/データの読み取り、フォルダーの作成/データの追加: このフォルダーのみ

ドメイン管理者の追加: フル コントロール: このフォルダー、サブフォルダー、およびファイル。

[OK]をクリックします。

  1. もう 1 つの問題は、iptables ルールでした。パケットを分析するときにパフォーマンスが変わるため、新しいチェーンを完全に実行し、すべての FORWARD ルールの順序を修正する必要がありました。新しいルールは次のとおりです。
    #!/bin/sh
    
    #すべてのルールをフラッシュする
    iptables -P 入力を受け入れる
    iptables -P 転送 受け入れ
    iptables -P 出力を受け入れる
    iptables -t nat -F
    iptables -t マングル -F
    iptables -F
    iptables -X
    iptables -t 生 -F
    
    # 基本テーブル
    iptables -A 入力 -m conntrack --ctstate 確立済み、関連 -j 受け入れ
    iptables -A 入力 -i lo -j 受け入れ
    
    #
    
    iptables -A FORWARD -o virbr32 -s 192.168.1.0/24 -d 192.168.100.0/28 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i virbr32 -s 192.168.100.0/28 -d 192.168.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -o virbr32 -i br0 -j ACCEPT
    iptables -A FORWARD -i virbr32 -s 192.168.100.0/2 -j ACCEPT
    iptables -A FORWARD -i virbr32 -o virbr32 -j ACCEPT
    iptables -A FORWARD -i virbr32 -j LOG --log-prefix "iptables-FORWARD-REJECT: "
    iptables -A FORWARD -i virbr32 -j REJECT --reject-with icmp-port-unreachable
    
    # ローカルサブネットをマスカレードする
    iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -j マスカレード
    # これらの予約済みアドレス ブロックにマスカレードしないでください。
    iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 224.0.0.0/24 -j 戻る
    iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 255.255.255.255/32 -j 戻る
    
    # 中小企業
    # RPC EPM TCP 135
    # HTTPS 経由の RPC TCP 593
    # SMB (名前付きパイプ用) TCP 445
    # 一時範囲、ダイナミック *
    iptables -I FORWARD 6 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 445 -j ACCEPT
    iptables -I FORWARD 7 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 139 -j ACCEPT
    
    # VM からの DNS (ポート 53) および DHCP (ポート 67) パケットを受け入れます。
    iptables -I FORWARD 8 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT
    iptables -I FORWARD 9 -i virbr32 -o br0 -m conntrack --ctstate NEW -p udp -m udp -m multiport --dports 53,67 -j ACCEPT
    
    #
    
    #
    
    # 以下の2つのルールは、TCPパケットのみが検査されることを保証します。その他
    # *filter テーブルに進みます。
    iptables -t 生 -N TCPFLAGS
    iptables -t raw -A PREROUTING -p tcp -j TCPFLAGS
    iptables -t raw -A PREROUTING -j ACCEPT
    
    # 標準的なハンドシェイクを素早く受け入れる
    # ACK または ACK/SYN を許可する
    #-A TCPFLAGS -j 受け入れる
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、ACK、URG、PSH、RST ACK -j ACCEPT
    
    # URGまたはPSHのいずれか、または両方、あるいはどちらも許可しないACK/FINを許可する
    # ただしSYNとRSTは設定できません
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、ACK、RST ACK、FIN -j ACCEPT
    
    # SYNまたはACK/SYNを許可する
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、URG、PSH、RST SYN -j ACCEPT
    
    # RST または ACK/RST を許可する
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、URG、PSH、RST RST -j ACCEPT
    
    # このルールはクリスマスツリーとフィン攻撃をキャッチします
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN FIN -j DROP
    # このルールは、クリスマスツリーと syn/rst 攻撃をキャッチします
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags SYN SYN -j DROP
    
    # このルールはヌル攻撃をキャッチします
    iptables -t raw -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j DROP
    
    #-A TCPFLAGS -p tcp -ecn-tcp-cwr -j DROP
    # これらのルールは不正な ack の組み合わせをキャッチします
    #-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC
    #iptables -t 生 -A TCPFLAGS -j ACCEPT
    
    # では、TCP では何を受け入れるのでしょうか?
    # ハンドシェイク (ACK/FIN)、(ACK/SYN)、(SYN)、(ACK)、(RST)、(ACK/RST)、
    # PSH または URG または FIN または ACK を含むデータ パケット
    
    #
    
    #ログパケットがドロップされました
    iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
    iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4
    iptables -A 出力 -m 制限 --limit 2/分 -j ログ --log-prefix "IPTables-出力-ドロップ: " --log-level 4
  • ご覧のとおり、iptables -A FORWARD の代わりに iptables -I FORWARD を使用しました。これにより、フィルタ テーブルで順序付けられたルールを実行し、最初に重要なルールを配置し、その後、残りを DROP または拒否してさらに深く掘り下げることができるためです。すべての FORWARD ルールはこの行の前に置かれます。
    iptables -A 入力 -p icmp --icmp-type 8 -m conntrack --ctstate 新規 -j 受け入れる

編集: VM から LAN 192.168.1.0/24 の外部にファイルをコピーするときに、転送速度を上げるためにいくつか変更を加える必要がありますが、4Mb/s を超えることはできません。アドバイスをいただければ幸いです。

関連情報