2017-07-19 10 views
-1

現在のアプリケーションでは、リソースが限られている組み込みLinuxシステムでは、ポート502でイーサネットTCP/IP経由で外部デバイスとこのボードとの通信が要求されます。 1024未満のポートは* nix環境下でブロックされます。双方向ポート転送でポート502に着信を許可する

外部デバイスが502でポートを開き、埋め込みデバイスが8502でリッスンしているとします。これらのデバイス間で双方向通信を透過的に許可するにはどうすればよいですか?

ROOTアクセスは、このポート転送ソリューションを実装するために許可されています。これは、継続的に組み込みLinuxデバイス内に常駐しますが、そのための正しいコマンドが見つからないことです。

Iは、次のコマンドの異なる組み合わせで、iptablesを用いて試みた:

iptables -A INPUT -p tcp --dport 502 -j ACCEPT 
iptables -A OUTPUT -p tcp --dport 502 -j ACCEPT 
iptables -A INPUT -p tcp --dport 8502 -j ACCEPT 
iptables -A OUTPUT -p tcp --dport 8502 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp --dport 502 -j DNAT --to 0.0.0.0:8502 
iptables -A INPUT -p tcp --dport 502 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp --sport 502 -m state --state ESTABLISHED -j ACCEPT 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 502 -j DNAT --to 127.0.0.1:8502 
iptables -t nat -I OUTPUT -p tcp -o eth0 --dport 8502 -j REDIRECT --to-ports 502 

最後に、iptables-saveので、ルールを実装することができる行います。

いくつかの制限事項:

  • それが制約されたデバイスなので、(今のところの内側にapt-getを持つから...)新しいパッケージをインストールすることはできません。
  • は、外部デバイスのIPアドレスを予測できません。これは、接続が確立されている別のデバイスからのものである可能性があるためです。

このタスクをどのように進めるかについてのご意見はありますか?前もって感謝します。

EDIT:socatnetcapどちらが...この非常に問題に関する事例他の誰かがつまずいて

答えて

0

用意されています。残念ながら、私のiptablesのバージョンはそれを動作させるために重要だったREDIRECT、をサポートしていません。 解決策は、私のハードウェアの別のアプリケーションをコンパイルすることでした。この場合はsocatです。

自分のアプリケーションを動作させるためにコマンドがした

socat TCP-LISTEN:502,fork TCP-CONNECT:127.0.0.1:8502

が、それは将来のニーズのために役立つことができます願っています。

関連する問題