2つのネットワークを接続する必要があるコンピュータがあります192.168.0.x
。192.168.1.x
192.168.0.x
インターフェイスを介してアクセスでき、インターフェイスtun3
を192.168.1.x
介してアクセスできますvirbr1
。
0.x コンピュータは 1.x コンピュータと通信できますが、その逆ではないようです。
virbr1のarpパケットが破棄されたようです。これはどこで起こりますか?
以下は、2つのネットワークを接続する必要があるホストの2つのインターフェイス(tun3とvirbr1)のifconfigです。
root@pgrozav:/home/paul/data/work/server# ifconfig tun3 ; tun3リンクカプセル:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet アドレス: 10.1.0.1 PtP: 10.1.0.2 マスク: 255.255.255.255 MTU ポイントで NOARP マルチキャストを実行: 1500 指標: 1 RXパケット:942エラー:0ドロップ:0オーバーフロー:0フレーム:0 TXパケット:463エラー:0ドロップ:0オーバーフロー:0キャリア:0 衝突: 0 txqueuelen: 500 RXバイト:88986(86.9KiB)TXバイト:42452(41.4KiB) virbr1リンクカプセル:イーサネットHWaddr 52:54:00:78:23:3b inetアドレス:192.168.1.1ブロードキャスト:192.168.1.255マスク:255.255.255.0 マルチキャストを実行するアップストリームブロードキャストMTU:1500指標:1 RXパケット:51616エラー:0ドロップ:0オーバーフロー:0フレーム:0 TXパケット:1198エラー:0ドロップ:0オーバーフロー:0キャリア:0 クラッシュ: 0 txqueuelen: 0 RXバイト:1469672(1.4MiB)TXバイト:155418(151.7KiB)
また、IPTablesのルールは次のとおりです。
root@pgrozav:/home/paul/data/work/server# iptables -nvL チェーン入力(ポリシーACCEPT 4097Kパケット、1544Mバイト) pkts byte target prot は出力ソースターゲットを選択します。 0 0 UDPを許可する - virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 TCP受け入れ - virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 UDPを許可する - virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 tcpを許可 - virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 0 0 UDPを許可する - virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 tcpを許可 - virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 UDPを許可する - virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 tcpを許可 - virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD(ポリシーは481パケット、40360バイトを許可) pkts byte target prot は出力ソースターゲットを選択します。 0 0すべて受け入れ - * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate関連、確立 0 0すべて受け入れ - virbr0 * 192.168.122.0/24 0.0.0.0/0 0 0すべて受け入れ - virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 0 0すべて拒否 - * virbr0 0.0.0.0/0 0.0.0.0/0拒否icmpポートに接続できません 0 0すべて拒否 - virbr0 * 0.0.0.0/0 0.0.0.0/0拒否icmpポートに接続できません 393 42938すべて受け入れ - * virbr1 0.0.0.0/0 192.168.1.0/24 ctstate関連、確立済み 397 35116すべて受け入れ - virbr1 * 192.168.1.0/24 0.0.0.0/0 0 0すべて受け入れ - virbr1 virbr1 0.0.0.0/0 0.0.0.0/0 0 0すべて拒否 - virbr1 * 0.0.0.0/0 0.0.0.0/0拒否icmpポートに接続できません チェーン出力(ポリシーは3217Kパケット、435Mバイト許容) pkts byte target prot は出力ソースターゲットを選択します。 0 0 UDPを許可する - * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 0 0 UDPを許可する - * virbr1 0.0.0.0/0 0.0.0.0/0 udp dpt:68 root@pgrozav:/home/paul/data/work/server# iptables -nvL -t nat チェーンPREROUTING(ポリシーは99697パケット、15Mバイト許容) pkts byte target prot は出力ソースターゲットを選択します。 チェーン入力(ポリシーACCEPT 65648パケット、13Mバイト) pkts byte target prot は出力ソースターゲットを選択します。 チェーン出力(ポリシーは169Kパケット、12Mバイト許容) pkts byte target prot は出力ソースターゲットを選択します。 チェーンPOSTROUTING(ポリシーは169Kパケット、12Mバイト許容) pkts byte target prot は出力ソースターゲットを選択します。 69 5293 すべて返却-- * * 192.168.122.0/24 224.0.0.0/24 0 0すべて返却 - * * 192.168.122.0/24 255.255.255.255 0 0迷彩tcp -- * * 192.168.122.0/24 !192.168.122.0/24 マスクポート: 1024-65535 0 0迷彩udp -- * * 192.168.122.0/24 !192.168.122.0/24 マスクポート: 1024-65535 0 0すべて変装 - * * 192.168.122.0/24 !192.168.122.0/24 69 5293 すべて返却-- * * 192.168.1.0/24 224.0.0.0/24 0 0すべて返却 - * * 192.168.1.0/24 255.255.255.255 5 300 MASQUERADE tcp -- * * 192.168.1.0/24 !192.168.1.0/24 マスクポート: 1024-65535 12 766 MASQUERADE udp -- * * 192.168.1.0/24 !192.168.1.0/24 マスクポート: 1024-65535 5 420 すべて迷彩 - - * * 192.168.1.0/24 !192.168.1.0/24
ルーティングテーブルは次のとおりです。
root@pgrozav:/home/paul/data/work/server# IP ルーティング デフォルト値は 192.168.200.1 dev eth0 です。 10.1.0.2 dev tun3 proto カーネルスコープリンク src 10.1.0.1 10.1.0.1 dev tun3 スコープで接続 192.168.0.0/24 192.168.1.0/24 dev virbr1 proto カーネルスコープリンク src 192.168.1.1 192.168.122.0/24 dev virbr0プロトタイプカーネルスコープリンクsrc 192.168.122.1 192.168.200.0/24 dev eth0プロトタイプカーネル範囲リンクsrc 192.168.200.70 root@pgrozav:/home/paul/data/work/server# IP ルーティングリストテーブル 200 デフォルトは 10.1.0.1 dev tun3 を渡します。 10.1.0.1 dev tun3による192.168.1.0/24
実際にこれを設定するスクリプトがあります。
リモートホスト=開発 トンネル番号=3 トンネルプレフィックス名="tun" トンネル名="$tunnelPrefixName$tunnelNumber" トンネルローカルIP = "10.1.0.1" トンネルリモート ip="10.1.0.2" リモートネットワーク登録="192.168.0.0" RemoteNetworkToJoinNetmask="255.255.255.0" RemoteNetworkToJoinInterfaceName="eth0" localNetworkToJoin="192.168.1.0" localNetworkToJoinNetmask="255.255.255.0" localNetworkToJoinInterfaceName="virbr1" ssh -f -NTC -w $tunnelNumber:$tunnelNumber $remoteHost IP リンクの設定 $tunnelName up ssh $remoteHost IP リンク設定 $tunnelName up IP アドレスを追加 $tunnelLocalIP/32 ピア $tunnelRemoteIP 開発者 $tunnelName SSH $remoteHost IP アドレスを追加 $tunnelRemoteIP/32 ピア $tunnelLocalIP dev $tunnelName パスの追加 -net $remoteNetworkToJoin gw $tunnelLocalIP ネットマスク $remoteNetworkToJoinNetmask dev $tunnelName $tunnelLocalIP dev $tunnelName テーブル 200 による IP パスのデフォルト値の追加 $localNetworkToJoin/24 テーブル 200 で IP ルールを追加する ssh $remoteHost ルート add-net $localNetworkToJoin gw $tunnelRemoteIP ネットワークマスク $localNetworkToJoinNetmask dev $tunnelName ssh $remoteHost iptables -A 転送 -i $remoteNetworkToJoinInterfaceName -o $tunnelName -m 状態 - 状態が設定され、関連 -j 許可 ssh $remoteHost iptables -A FORWARD -s $tunnelLocalIP -o $remoteNetworkToJoinInterfaceName -j を受け入れる ssh $remoteHost iptables -t nat -A POSTROUTING -s $tunnelLocalIP -o $remoteNetworkToJoinInterfaceName -j MASQUERADE
私はこのマシンでKVMを実行していますが、virbr1はすべてのVMを持つ仮想LANに自分のマシンを接続します。私のローカルLAN(仮想マシン - 1.xを含む)をリモートネットワーク(0.x)に接続しようとしています。
答え1
Arps は、LAN 上の IP-MAC ペアを識別するために使用されます。 ARPがあなたの問題に関連しているかどうかはわかりません。
0.x -> 1.x接続がうまくいくと、通信中に0.xから1.xに、1.xから0.xにパケットが送信されるため、ルーティング問題がないという意味です(TCP通信を想定)
1.x -> 0.xの接続が失敗した場合は、ファイアウォール、NAT、アプリケーションアクセスリスト、TCPラッパーなどがある可能性があります。
クライアント、ゲートウェイ、サーバーを確認する必要があります。
答え2
私の1.2コンピュータのルーティングテーブルに問題があり、そこから0.6にpingを送信します。
[root@localhost ~]# IP ルーティングリスト デフォルト値は 192.168.1.1 dev eth0 proto static metric 100 です。 192.168.1.1 dev eth0 raw static による 192.168.0.0 192.168.0.0/16dev eth0プロトタイプカーネルスコープリンクsrc 192.168.1.2メトリック100
私はVMがクリーンで(デフォルトでは)空のルーティングテーブルとiptablesを持っていると仮定します。私はこれを理解しようと数日または数週間を過ごしました。
お時間をいただきありがとうございます。