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


16

注:クライアントデバイス(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のルーター到達できません

デフォルトのゲートウェイとしてコンピューター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を実行しているコンピューターを別のコンピューターのゲートウェイとして簡単に機能させるための正しい手順ですか?

回答:


21

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

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


簡潔な説明、確かに。すべてのコードブロックをコンピューターAで実行する必要がありますか?
ソパラホデアリエレス

@SopalajodeArrierezはい、これらはすべて「ゲートウェイ」コンピューターで実行されます。システムBは、他のマシンに到達したい場合、ルーティングについて何も知る必要はありません。パケットをB(デフォルトGW)に送信します。
user1794469

デスクトップ上のUbuntu v14およびUtilite Pro(CompuLabsの組み込みデバイス)上のUbuntu v12での動作をテストしました。各行が正確に行うことを拡張してくれてありがとう。私は研究し、機能していない多くの長い長い長い説明を見つけました。このQuestion-Answerスレッドが将来、他の人にとって役立つことを願っています。
ソパラホデアリエレス

@ user1794469ゲートウェイインターフェースが仮想、つまりタップインターフェースの場合も同じですか?あなたはで見ることができ、ここで
ラム

1

ゲートウェイとして機能する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
    

あり、多数 のリンク同様の 質問あなたが持っている問題を解決するために参照することができが。

この特定のケースで間違っているように見えるのは、ルートとゲートウェイのセットアップが両方のコンピューターで完了しておらず、ネットワークアドレス変換(NAT)がiptablesを使用して有効になっていないため、ゲートウェイが他のサブネット上のコンピューターからの要求を実行できる彼らに代わって。

これは、インターネット接続を確立するときにも重要です。接続の一方の端を担当するためです(たとえば、PPPoE接続のゲートウェイとしてLinuxコンピューターを使用するなど)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.