最近どのデバイスpppdが作成されたかを検出する方法は?

最近どのデバイスpppdが作成されたかを検出する方法は?

PPPDを使用してSSHを介してVPNを設定しようとしています(下)。アーチスウィキ)。与えられたコマンドは次のとおりです。

/usr/sbin/pppd updetach noauth silent nodeflate pty \
  "/usr/bin/ssh root@remote-gw /usr/sbin/pppd nodetach notty noauth"  \
  ipparam vpn 10.0.8.1:10.0.8.2

上記のコマンドを適切に修正して正常に設定しました。サーバー側から内部ネットワークに接続するには、iptablesサーバー側で設定転送を使用する必要があります。今回のSF投稿):

iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

私はこれを自動化したい。現時点ではeth0変更されていますが、ppp0変更される可能性があります(たとえば、他の人が同様の設定を開始します)。pppdサーバー側のコマンドがどのインターフェイスを生成したかを検出する方法は?分析dmesg?出力を比較しますip -o aか?pppd私に報告できますか?

  • クライアントは最新のArch Linuxです。
  • サーバーは最新のUbuntu 14.04です。

dmesgうまくいかないようです。

$ dmesg | grep -i ppp
[    0.803033] PPP generic driver version 2.4.2
[135747.442807] PPP BSD Compression module registered
[135747.459013] PPP Deflate Compression module registered

デバイスが作成されるという言及はありません。syslogより便利に見えます。

Apr 26 13:52:15 server pppd[12725]: pppd 2.4.5 started by muru, uid 0
Apr 26 13:52:15 server pppd[12725]: Using interface ppp0
Apr 26 13:52:15 server pppd[12725]: Connect: ppp0 <--> /dev/pts/7
Apr 26 13:52:15 server pppd[12725]: BSD-Compress (15) compression enabled

このUsing interface ppp0行は私が望むようです。私は次のように得ることができると思います:

awk '/started by muru/{getline; pppdev=$NF} END {print pppdev}'

pppdの出力を信頼できますか?

答え1

おそらく/etc/ppp/ip-up.dあなたが探している場所はまさにその場所でしょう。

私の例はGentoo Linuxで動作しますが、同じディレクトリ構造がArchにも存在するようです。

VPN接続が確立されるたびに、通常は順番に/etc/ppp/ip-up実行されます/etc/ppp/ip-up.d/*。最初のパラメータは接続されたpppnデバイスです。

/etc/ppp/ip-up.d/90-localたとえば、次のスクリプトを以下に入力します。

#!/bin/sh

# Optional trace:
# logger -t "ppp" "$6: $1 (${2:--}, $3) $4 --> $5"

iptables -A FORWARD -i $1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o $1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

pppdスクリプトを実行する前に環境変数セットを使用できます。あなたが探している人はです$DEVICE。上記のスクリプトを$1次のように置き換えます。$DEVICE

iptables -A FORWARD -i $DEVICE -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o $DEVICE -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

接続が確立されたときに何が起こるかについて詳しくは、man pppdリソースをご覧ください。pppd

関連情報