注:クライアントデバイス(
computer B
この例では)ゲートウェイコンピュータ経由でインターネットを取得したいのですが、ネームサーバーの解決を設定する必要があるかもしれません。これについてはここでは説明しません(ゲートウェイは必ずしもインターネットに対応しているわけではありません)。
ネットワークルーティングの基本を理解しようとしています。
私は自分のLANを実験しています(今のところインターネットは必要ありません。LAN通信のみです)。
私はネットワーク構成の問題がかなり複雑であることを知っていますが、コンピュータ(たとえばA)をゲートウェイとして機能する別のもの(たとえばB)にしようとしています(両方ともUbuntu Linuxを実行しています)。
Bだけがルータに到達できる必要があります。つまり、Aだけが到達可能です。
これは事実です:
Router for computer A --> 192.168.0.1
Computer A - eth0 --> 192.168.0.2
Computer A - eth1 --> 192.168.1.1
Computer B - eth0 --> 192.168.1.2
コンピュータAが接続する細かいルーター。
コンピュータAとB正常に接続(ping、SSH ...など)それらの間。
コンピューターBは、コンピューターAに対してルーターに到達しないを実行できます。
Bコンピューターを追加するだけAをデフォルトゲートウェイとしてをアクティブ化AのIP転送をアクティブにすると、BがAのルーターに到達できるようになると考えていました。
luis@ComputerB:~$ Sudo route add default gw 192.168.1.1
luis@ComputerB:~$ Sudo routel
target gateway source proto scope dev tbl
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0 8 local 127.0.0.1 kernel Host lo local
127.0.0.1 local 127.0.0.1 kernel Host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
192.168.1.0 broadcast 192.168.1.2 kernel link eth0 local
192.168.1.2 local 192.168.1.2 kernel Host eth0 local
192.168.1.255 broadcast 192.168.1.2 kernel link eth0 local
default 192.168.1.1 eth0
169.254.0.0 16 link eth0
192.168.1.0 24 192.168.1.2 kernel link eth0
コンピュータA(中間ゲートウェイ)で:
root@ComputerA:~$ echo 1 > /proc/sys/net/ipv4/ip_forward
コンピューターBは引き続きコンピューターAにpingできますが、Aのルーターは応答しません。
luis@ComputerB:~$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C
(ping応答なし)
これは正しい手順で、Linuxを実行しているコンピュータを別のコンピュータのゲートウェイとして簡単に機能させるためのものですか?
トラフィックがBに戻ることを確認する必要があるだけです。現在、トラフィックはBから外部に転送されていますが、AはトラフィックをBに戻す方法を知りません。それを通過する接続。これを行うには、 [〜#〜] nat [〜#〜] を有効にします。転送を許可するステップ1がすでにあります。次に、iptables
を使用していくつかのファイアウォールルールを追加する必要があります。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
これは、ネットワークアドレス変換テーブルで、出力eth0(外部)でのパケットのルーティングを把握した後、返信アドレス情報を独自のものに置き換えて、返信パケットが到着するようにします。また、これを行ったことを思い出してください(この接続を記憶するルックアップテーブルのように)。
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Eth1(内部インターフェース)からのパケットがeth0(外部インターフェース)を出ることを許可します。
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
前に作成したルックアップテーブルを使用して、外部インターフェイスに到着したパケットが、内部からすでに開始された接続に実際に属しているかどうかを確認します。
ゲートウェイとして機能する2台のLinuxコンピューター間でルーティングを正しく機能させるには、いくつかの準備が必要です。
ルーターの両方のインターフェースにルートを追加する必要があります。
route add -net 192.168.0.0/24 gw 192.168.0.1
route add -net 192.168.1.0/24 gw 192.168.1.1
両方のゲートウェイのリモートネットワークにローカルゲートウェイを指定する必要があります。これにより、ローカルネットワーク上のコンピューターは、リモートネットワークにパケットを送信する場所を知ることができます。ゲートウェイは、リモートネットワークにパケットを送信するコンピューターのIPアドレスである必要があります。
ゲートウェイ間でNATを機能させるには、IPマスカレードを有効にする必要があります。
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
マスカレードに同じインターフェースを使用しているため、送信元と宛先を指定する必要がある場合があります。
iptables -t nat -A POSTROUTING -i eth0 -s 192.168.0.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
そして他のゲートウェイ:
iptables -t nat -A POSTROUTING -i eth1 -s 192.168.1.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
各ゲートウェイについて、ローカルネットワークトラフィックは、次のような適切なインターフェイスで受け入れられる必要があります。
iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -j ACCEPT
または
iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
多数links および similarquestions は、発生している問題を解決するために参照できます。
この特定のケースで間違っているように見えるのは、ルートとゲートウェイのセットアップが両方のコンピューターで完了しておらず、ネットワークアドレス変換(NAT)がiptablesを使用して有効になっていないため、ゲートウェイが他のサブネット上のコンピューターからのリクエストを実行できることです彼らに代わって。
これは、インターネット接続を設定するときにも重要です(たとえば、LinuxコンピューターをPPPoE接続のゲートウェイとして使用する)。).