Como eu detecto qual dispositivo foi criado recentemente pelo pppd?

1

Estou tentando configurar uma VPN sobre SSH usando PPPD (seguindo o Arch Wiki ). O comando dado é:

/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

Eu consegui configurá-lo com modificações apropriadas para o comando acima. Para conectar-me à rede interna no lado do servidor, tive que configurar o encaminhamento usando iptables no lado do servidor (seguindo cegamente este SF postar ):

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 

Eu gostaria de automatizar isso. Agora, eth0 é fixo, mas o ppp0 pode ser alterado (por exemplo, outra pessoa também iniciou uma configuração semelhante). Como posso detectar qual interface foi criada pelo comando pppd no lado do servidor? Analisa dmesg ? Difira a saída de ip -o a ? Posso obter pppd para reportar para mim?

  • O cliente é um Arch Linux atualizado
  • O servidor é um Ubuntu 14.04 atualizado

dmesg parece ser inútil:

$ 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

Nenhuma menção de um dispositivo sendo criado. syslog parece ser mais útil:

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

A linha Using interface ppp0 parece ser o que eu quero. Eu acho que posso entender assim:

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

Posso confiar na saída do pppd para isso?

    
por muru 26.04.2015 / 08:06

1 resposta

2

Provavelmente /etc/ppp/ip-up.d é o local que você está procurando.

Meu exemplo é válido no Gentoo Linux, mas a mesma estrutura de diretórios parece existir no Arch.

Toda vez que uma conexão VPN é feita /etc/ppp/ip-up é executado, o que normalmente executa /etc/ppp/ip-up.d/* por vez. Seu primeiro argumento é o dispositivo pppn anexado.

Coloque este script em /etc/ppp/ip-up.d/90-local , por exemplo:

#!/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 

Você também pode usar as variáveis de ambiente pppd conjuntos antes de executar scripts. Aquele que você está procurando é $DEVICE . Simplesmente substitua $1 por $DEVICE no script acima:

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 

Veja man pppd para mais informações sobre o que o pppd faz ao estabelecer uma conexão.

    
por 26.04.2015 / 10:46