PPPDを使用してSSH経由でVPNをセットアップしようとしています(以下 Arch Wiki )。与えられたコマンドは次のとおりです。
/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
に報告してもらえますか?
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の出力に頼ることはできますか?
おそらく/etc/ppp/ip-up.d
はあなたが探している場所です。
私の例はGentooLinuxで有効ですが、同じディレクトリ構造が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
接続を確立するときにpppd
が行うことの詳細については、man pppd
を参照してください。