web-dev-qa-db-ja.com

Linuxをゲートウェイとして使用するにはどうすればよいですか?

注:クライアントデバイス(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を実行しているコンピュータを別のコンピュータのゲートウェイとして簡単に機能させるためのものですか?

17

トラフィックが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

前に作成したルックアップテーブルを使用して、外部インターフェイスに到着したパケットが、内部からすでに開始された接続に実際に属しているかどうかを確認します。

22
user1794469

ゲートウェイとして機能する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アドレスである必要があります。

  • ネットワーク間でトラフィックを送信することを希望するコンピューターは、ローカルゲートウェイがリモートネットワークとの間のトラフィックを処理していることを認識する必要もあります。これは通常、動的ホスト制御プロトコル(DHCP)を介して行われますが、インターネットに別のゲートウェイを使用する場合は、インターネットと他のネットワークの両方にアクセスする必要があるコンピューター(たとえば、経由でインターネットゲートウェイ)で両方を指定する必要があります。 DHCPとルートを介した他のネットワークのゲートウェイ)。
  • 両方のゲートウェイで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接続のゲートウェイとして使用する)。).

1
John Pettit