web-dev-qa-db-ja.com

外部デバイスを使用せずに4台のコンピューターを接続するにはどうすればよいですか?

4台のコンピューターを直列に接続する必要があります。トポロジーを以下に示します。

                c1<--->c2<--->c3<--->c4

C2およびc3コンピューターに複数のイーサネットカードがあります。インターネットからの外部接続は必要ありません。これら4台のコンピューターだけが相互に通信できるはずです。

注:すべてのコンピューターは、16.04以降のUbuntuバージョンを実行しています。

前もって感謝します。

1
sourabh jain

ネットワークカードはストレートケーブルとクロスケーブルの両方をサポートしていることに注意してください。そうでない場合は、クロスオーバーイーサネットケーブルが必要になります。

次に、すべてのデバイスが接続されたら:

転送を有効にする

まず、デバイスでIPv4転送をアクティブにします。

オンザフライで有効にするには、次を使用できます。

echo 1 > /proc/sys/net/ipv4/ip_forward

永続的に有効にするには、ファイル/etc/sysctl.confandを編集してnet.ipv4.ip_forward = 1で行のコメントを解除します。次に、confをリロードします:sysctl -p /etc/sysctl.conf

IPとルートを定義する

次に、デバイスのIPとルートを構成します。

これを実行するには、ファイル/ etc/network/interfacesを直接編集します。

例:

auto eth0
iface eth0 inet static
        address 192.168.1.1 # c1, configure the same subnet in the c2 interface that is connected to the c1 device
        netmask 255.255.255.0
        up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1

すべてのデバイスが同じサブネット内にある場合は、ルートを記述する必要はありません。

デバッグ/確認

これが機能しない場合は、ファイアウォールを確認し、必要に応じて編集してください。

Sudo iptables -L

この回答がお役に立てば幸いです。

編集

C2は両方のサブネットワークに直接接続されているため、3番目のネットワークへのルートを設定するだけです。

/ etc/network/intefacesで複数のインターフェースを指定できます

auto  [interface1]
iface [interface1] inet static
        address 192.168.1.2 # The same subnet that is configure for C1
        netmask 255.255.255.0
        # You don't need specific route for this interface because there is no another network behind C1

auto [interface2]
iface [interface2] inet static
        address 192.168.2.1 # C2<--->C3 subnet
        netmask 255.255.255.0
        up route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.2 # Where 192.168.3.0 is the C3<-->C4 subnet and 192.168.2.2 the C3 address of the interface in the subnet C2<-->C3

この構成はテストしていませんが、機能するはずです。設定が完了したら、ip routeコマンドでルートを確認できます。

C3とC2には、両方のネットワークへの直接ルートがあります。したがって、3番目のネットワークへのルートを定義する必要があります(C2の場合はC3 <-> C4、C3の場合はC1 <-> C2)。 C2とC3がすべてのネットワークにアクセスできるようになったら、C1とC4のデフォルトゲートウェイとしてそれらを定義する必要があります。

enter image description here

1
Eraseth