起動時にLinuxルーターにいくつかのiptablesルールを追加するために/ etc / rc.localを使用していますが、いくつかのルールは追加されません。まだインターフェイスがないからだそうです。
これが私がそこに持っているものです:
sudo /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
起動時にppp0インターフェイスが表示されるまでに時間がかかるように見え、ppp0インターフェイスが存在しないため、iptablesはルールの追加を拒否する可能性があります。 iptablesにルールを追加するように強制する方法はありますか?ルールを追加する前にインターフェイスが存在するのを待つために、スクリプトにループを導入する前にこれを確認する必要があると思います。
また、インターフェイスが消えてルールを追加した後に戻っても、iptablesはルールを削除しないことを観察しました(私の場合は良い動作です)。
ベストアンサー1
すべてのDebianベースのディストリビューションでpost-up
使用してください。/etc/network/interfaces
これにより、スクリプトが起動した直後にスクリプトを実行できますifup
。詳しくはマニュアルページinterfaces
。
注:post-down
もちろん、ルールを削除するためにも使用できます。
システムが一部のスクリプトを介してppp0を起動しても動作しない場合は、上記のタスクに対応するサブフォルダ*.d
でフックスクリプトを使用できます。など/etc/network
のいくつかの変数がスクリプトに提供されます。マニュアルページは非常に詳細です。IFACE
ADDRFAM
一方、up
==post-up
とdown
==内部では、正しいサブフォルダはそれぞれとpost-down
です。if-down.d
if-up.d
/etc/network/interfaces
source
宣言されたインターフェイスを起動するプロセスを「デバッグ」するには、ifup(8)
詳細を参照してください。特にあなたは欲しいでしょうifup -nvl
(そしてインターフェース名も同じでしょう)。プロセスを模倣するだけなので、許可なく実行することもできます。
可能な警告
これはDebianベースですが、Network Managerベースの設定には適用されません。ところで、ルーターに言及すれば、ネットワーク管理者が主導する可能性はほとんどないと思います。