私は2つのネットワークインターフェイス(1つのイーサネットと3Gモデムの1つ)があり、MQTTブローカーに2つの同時接続が必要なDebian 8システムを開発しています。つまり、接続は両方のインターフェイスを介して確立する必要があります。私が使用する言語はPythonで、MQTTクライアントはPahoです。
Pahoの接続メソッドにbind_addressというパラメータを指定すると、私が望むように正しく動作します。 2つのPahoインスタンスを作成し、両方のインターフェイスのIPアドレスを提供するだけです。
問題は、そのうちの1つしか接続できないことです。
明示的に指定されたインターフェイス(ping -I ifname a.b.c.d
)のプロキシIPに対してpingを試みましたが、両方のインターフェイスで動作しました。同じIP(イーサネットIP)を使用して両方のPahoインスタンスを提供することもできます。
現時点では、ルーティング関連の問題であると推測されていますが、これは私がよく知らない分野です。
この問題をどのように解決できますか?
ip addr
必要に応じて出力:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:04:25:18:e9:a9 brd ff:ff:ff:ff:ff:ff
inet 82.195.211.80/23 brd 82.195.211.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::204:25ff:fe18:e9a9/64 scope link
valid_lft forever preferred_lft forever
3: sit0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default
link/sit 0.0.0.0 brd 0.0.0.0
inet6 ::127.0.0.1/96 scope host
valid_lft forever preferred_lft forever
4: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 0a:71:b0:b9:ca:39 brd ff:ff:ff:ff:ff:ff
inet 10.36.124.58/30 brd 10.36.124.59 scope global wwan0
valid_lft forever preferred_lft forever
inet6 fe80::871:b0ff:feb9:ca39/64 scope link
valid_lft forever preferred_lft forever
ip route
必要に応じて出力:
default via 82.195.210.1 dev eth0 metric 202
default via 10.36.124.57 dev wwan0 metric 204
default via 82.195.210.1 dev eth0 proto static metric 1024
10.36.124.56/30 dev wwan0 proto kernel scope link src 10.36.124.58 metric 204
10.36.124.58 via 127.0.0.1 dev lo metric 204
82.195.210.0/23 dev eth0 proto kernel scope link src 82.195.211.80 metric 202
82.195.211.80 via 127.0.0.1 dev lo metric 202
ベストアンサー1
シンプルソースポリシールーティング問題を解決することもできます。という名前の新しいルーティングテーブルを作成します。移動する未使用の数字(ここでは100です。オプションであるため、その数字を使用できます):
echo 100 mobile >> /etc/iproute2/rt_tables
3Gゲートウェイにルーティングするようにこのテーブルを設定します。
ip route add default via 10.36.124.57 dev wwan0 table mobile
ip route flush cache
最後に、新しい設定を使用するには、3Gソースアドレスのルールを追加してください。移動するテーブル:
ip rule add from 10.36.124.58 table mobile
あなたの質問からインターフェース名(wwan0)とアドレスを取得しました。インターフェイス名は安定していますが(少なくとも3Gモデムをコンピュータに接続するまで)、ローカルアドレスとゲートウェイアドレスは接続するたびに変わることがあります。この設定をスクリプトで作成したい場合があります。