web-dev-qa-db-ja.com

Linuxで切り替える方法

私はこれを持っています clearfog pro armbianイメージのルーターボード。私がやりたいのは、clearfogproを介して6つのraspberryPiをインターネットに接続することです。結局、私は7台のコンピューターすべてにIPアドレスを持たせて、すべてのコンピューターに言えるようにしたいのです。インターネットで読んだ後、これを実現するにはネットワークブリッジを設定する必要があることがわかりました。

私は最初にこれらの構成を試しました ここ 。しかし、彼らは私のために働きませんでした。

これは私の/ etc/network/interfacesファイルの現在の構成です

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
  bridge_ports eth0 lan1

これはip linkからの出力です

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether fe:cc:39:e2:0e:81 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 532 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:0d:19:18 brd ff:ff:ff:ff:ff:ff
6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.0
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff

およびip route

    192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 

だから私は192.168.178.44にSSH接続しようとしましたが、それがlan1のコンピューターにつながると思っていましたが、そうではありませんでした。再びクリアフォグに接続しました。

また、eth1とeth0をブリッジしようとしましたが、can't add eth1 to bridge br0: Invalid argumentが返されました。

だから私の質問は:正しいブリッジのセットアップは何ですか?

編集:要求に応じて私のbrctl show

bridge name bridge id       STP enabled interfaces
br0         8000.00504325fb84   no      eth0
                                        lan1

ifconfig

br0    Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      inet6 addr: fe80::250:43ff:fe25:fb84/64 Scope:Link
      inet6 addr: 2001:984:6433:1:250:43ff:fe25:fb84/64 Scope:Global
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:572 errors:0 dropped:0 overruns:0 frame:0
      TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:147582 (144.1 KiB)  TX bytes:11762 (11.4 KiB)

 eth0      Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1225 errors:0 dropped:0 overruns:0 frame:0
      TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:318910 (311.4 KiB)  TX bytes:15514 (15.1 KiB)
      Interrupt:38 

 eth1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      Interrupt:39 

lan1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

およびip route show

default via 192.168.178.1 dev br0 
192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.44 
1

私が正しく理解しているように、クリアフロッグにも接続されているスイッチに6つのRPiが接続されています。 RPiが相互に通信できるだけでなく、clearfrogを介してインターネットにアクセスできるようにするだけです。これからはClearfrogをCFと呼びます。

それでは、IPリンクを見てみましょう。

1: lo <- loopback
2: bond0 <- special interface for traffic aggregation/bonding
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Assuming this is your uplink
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> <- Assuming this is physically connected to your switch
5: eth2: <BROADCAST,MULTICAST>  <- Assuming this is inactive
6: tunl0@NONE: <NOARP> <- Tunnel interface for vpn
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Lan1 isn't physical, it's a VLAN inteface.
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- bridge interface you created

私にはわかりませんが、ルーターがWAN側でパブリックIPアドレスを受信するのか、それとも別のゲートウェイの背後に残るのかです。別のゲートウェイの背後にある場合は、 RPiを別のサブネットに配置し、CFにトラフィックをルーティングするように指示する必要があります。

例:

*internets*
   ^
|modem| -> |gateway| -> |    switch    |
                        ^    ^    ^    ^         
   192.168.178.0/25     PC1  PC2  PC3  CF           Primary Network
                                       ^
                                  |   switch    |
                                  ^  ^  ^  ^  ^  ^
   192.168.178.128/25             Pi Pi Pi Pi Pi Pi    Pi Network

プライマリネットワークにサブネット192.168.178.0/ 25を割り当てました。これにより、使用可能な範囲は.1〜.126になります。サブネット192.168.178.128/25をPiネットワークに割り当てました。これは使用可能な範囲が.129〜.254になります。

以前にやろうとしていたのは、2つのアダプターをブリッジすることだったと思います。 Macアドレスも持つ2つのアダプタの背後に複数のホストがある場合は、ブリッジではなく、ルーティングを実行する必要があります。

結局のところ、これはルーターですよね?質問は「切り替え方」でしたが、このデバイスを使って2つのネットワーク間のトラフィックを制御していませんか?そうでなければ、CFを削除してダムスイッチを投入することができます。組み込みLinuxは必要ありません。

Br0を削除するには:

    brctl show | awk '{if(NR>1)print}' | awk '{print $NF}' | while read line ; do brctl delif br0 $line ; done

ifconfig br0 down

brctl delbr br0

次に、ルーターの処理を行うためにルーターを準備しましょう。

/ etc/network/interfacesを編集します

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address 192.168.178.126
       network 192.168.178.0
       netmask 255.255.255.128
       gateway 192.168.178.1
       broadcast 192.168.178.127

auto eth1
iface eth1 inet static
       address 192.168.178.129
       network 192.168.178.128
       netmask 255.255.255.128
       broadcast 192.168.178.255   

次に、/ etc/sysctl.confを編集して、転送を有効にします。あなたは本当に必要最初の行だけですが、これは私がルーターに一般的に使用するものです:

net.ipv4.conf.all.forwading=1
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.send_redirects = 1                                                                                                                                                                                                         
net.ipv4.conf.default.send_redirects = 1                                                                                                                                                                                                                                                                                                                                                                                                            
net.ipv4.conf.all.accept_source_route = 1                                                                                                                                                                                                                                                                                                                                                                                                     
net.ipv4.conf.all.accept_redirects = 1                                                                                                                                                                                                       
net.ipv4.conf.all.secure_redirects = 1         

次に、次のコマンドを実行します:sysctl -p

次に、ルートを追加します。 ip route flush allを実行することをお勧めしますが、これを実行するとすぐにsshから切断されるため、コンソールにいる必要があります。

ip route flush all
ip rule flush
ip route add 192.168.178.0/25 via 192.168.178.1 dev eth0
ip route add 192.168.178.128/25 src 192.168.178.129
ip route add default via 192.168.178.1 dev eth0

次に、プライマリネットワークルーターに移動し、静的ルートを追加します。192.168.178.128/ 25 via 192.168.178.129これにより、メインゲートウェイ/ルーターに、内部ネットワーク上のホストがRPiネットワークに接続するときに転送するように指示します。 CF(ゲートウェイとして機能)への要求はさらにルーティングされます。

CFに戻ると、最後に行うことは、iptablesに転送ルールを追加することです。

#Allow rpi's to connect to the outside world but not initiate new connections to hosts on your primary network
iptables -I FORWARD -i eth1 -o eth0 -s 192.168.178.128/25 ! -d 192.168.178.0/25  -m conntrack --ctstate NEW -j ACCEPT
# Allow forwarding for established connections
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow hosts on your primary network to initiate new connections to pi's
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.178.0/25 -d 192.168.178.128/25  -m conntrack --ctstate NEW -j ACCEPT

これらのルールをiptables-save> /etc/iptables/rules.v4で保存することをお勧めします

ここで、IPをPiに割り当てるためにCF上のdhcpサーバーが必要になるか、静的アドレスを割り当てる必要があります。いずれの場合も、デフォルトゲートウェイをCFのIP192.168.178.129に設定する必要があります。

必要なのはそれだけです。ご不明な点がございましたら、お気軽にコメントください。できる限りサポートさせていただきます。

1
Gregory Wolf

ネットワーク/インターフェースファイル内:

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
bridge_ports eth0 lan1

それはいくつかのものを分離するのに役立ちます

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static #or dhcp
address <your address>
netmask  255.255.255.0
gateway  <your gateway>
bridge_ports eth1
bridge_stp off
bridge_fd 0

お役に立てれば

0
archae0pteryx