eth0からwlan0へのすべてのトラフィックルーティング

eth0からwlan0へのすべてのトラフィックルーティング

wlan0のRaspberry Pi経由で接続するWiFiアクセスポイントがあります。 eth0にアドレスを提供するためにRaspberry PiにDHCPサーバーを設定しました。 eth0に接続された古いルータ設定がありましたが、独自のアクセスポイントを送信し、いくつかの他のタスクを実行しました。

次のように見えます。

[main wifi AP] <-wlan0-> [raspberry pi] <- pi's eth0 -> (router/client)

DHCPサーバーから提供されたアドレスは問題ありませんが、eth0からwlan0へのトラフィックのルーティングに問題があります(これが正しいかどうかはわかりません)。何の問題もなくsshでパイに接続することもできます。

私はこれを試すためにiptablesのいくつかのルールを使用していますが、まったく機能しないようです。ローカルネットワーク外のアドレスには接続できません。たとえば、Piとラップトップの間で使用するルータに関係なく、メインAPはDHCPを介してRaspberry Piに提供するDNSサーバーに接続できません。

ダンプは次のとおりですiptables-save

# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*nat
:PREROUTING ACCEPT [1:32]
:INPUT ACCEPT [1:32]
:OUTPUT ACCEPT [7:432]
:POSTROUTING ACCEPT [5:336]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Feb 24 01:11:24 2016
# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*filter
:INPUT ACCEPT [3:140]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:308]
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
COMMIT
# Completed on Wed Feb 24 01:11:24 2016

ローカルネットワークの外部から接続されていない理由を知っている人はいますか?

答え1

紹介する

完全で機能的な例を作成するには十分な情報がないため、いくつかの前提がありますが、変更はマイナーでなければなりません。

仮説

  1. RaspberryPiのwlan0に接続されたネットワークは192.168.1.0/24です。
  2. RaspberryPiのeth0に接続されたネットワークは192.168.2.0/24です。
  3. RaspberryPiのwlan0デバイスには、IPアドレス192.168.1.1とeth0 192.168.2.1が割り当てられています。

プログラム

  1. RaspberryPiからすべてのiptablesエントリを削除します。
  2. RaspberryPi で IPv4 転送を許可します。

      # Execute as "root"
    echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
    sysctl -p
    
  3. RaspberryPiのwlan0ネットワークに接続されているデバイスに、それを有線ネットワークのゲートウェイとして使用するように指示します。これにより、パケットは192.168.1.0/24から192.168.2.0/24に移動できますが、これらのパケットへの応答は返されません(次の点で説明)。

    • ワイヤレスネットワークにLinuxコンピュータがある場合は、設定をテストするのに役立つ一時パスを追加できますが、再起動やその他のイベントは持続しません(Linuxディストリビューションによっては、作成するために他のファイルを編集する必要があるかもしれません)。この構成は継続的に)。テストを成功させるには、次のポイントまで待つ必要があることを覚えておいてください。簡単に言えば、以下を実行します。

      ip route replace 192.168.2.0/24 via 192.168.1.1
      
  4. RaspberryPiのeth0ネットワークに接続されているデバイスに、それをワイヤレスネットワークのゲートウェイとして使用するように指示します。

    • 有線ネットワークにLinuxコンピュータがある場合は、一時パスを追加できます。これは設定を完全にテストするのに役立ちますが、再起動やその他のイベントは持続しません(Linuxディストリビューションに従って他のファイルを編集して設定できます)。この構成は継続的に)。実装する:

      ip route replace 192.168.1.0/24 via 192.168.2.1
      
    • RaspberryPiを有線ネットワークのデフォルトゲートウェイに変更するには、上記のコマンドを次のように変更する必要があります。

      ip route replace default via 192.168.2.1
      
    • この新しいデフォルトゲートウェイを自動的に設定することもできます。 RaspberryPiがISC DHCPサーバーを使用して有線ネットワークを提供している場合は、「dhcp3.conf」設定ファイルの先頭に次の行を追加してから、デフォルトゲートウェイ設定がDHCPで提供されるようにサーバーを再起動できます。 :

      option routers 192.168.2.1
      

答え2

私はRaspberry Piであなたが説明するほとんどすべてのことをしました。クロスオーバーケーブルを使用してノートブックのイーサネットポートに直接接続しました。私はこれが重要だと思います。構成に問題があるかどうかはわかりませんが、何かがあるようです。私のラップトップで次のスクリプトを実行しています。

#!/bin/bash
/usr/bin/ip link set dev enp9s0 up
/usr/bin/ip addr add 172.16.1.1/24 dev enp9s0
sleep 10

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
iptables -A FORWARD -o enp9s0 -i wlp0s26f7u3 -s 172.16.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

dhcpd -cf /etc/dhcpd.enp9s0.conf enp9s0

enp9s0はイーサネットポートの名前で、ノートブックのwlp0s26f7u3USBワイヤレスカードの名前です。

ファイルは/etc/dhcpd.enp9s0.conf次のようになります。

option domain-name "wlan";
option domain-name-servers 10.0.0.3;
option routers 172.16.1.1;
option ntp-servers 10.0.0.3;
default-lease-time 14440;
ddns-update-style none;
deny bootp;
shared-network intranet {
        subnet 172.16.1.0 netmask 255.255.255.0 {
                option subnet-mask 255.255.255.0;
                pool { range 172.16.1.50 172.16.1.200; }
        }
}

それからRaspberry Piの電源を入れました。数秒後、これを使用してarp -aハードウェアアドレスとIPアドレス(おそらく172.16.1.50)を確認してからssh入力できます。

関連情報