「Pppd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「Tips and tricks」を「ヒントとテクニック」に置換)
 
(他の1人の利用者による、間の4版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:ネットワーク]]
 
[[Category:ネットワーク]]
 
[[en:Pppd]]
 
[[en:Pppd]]
 
[[ru:Pppd]]
 
[[ru:Pppd]]
{{Lowercase title}}
 
 
 
'''ppp''' (Paul's PPP Package) は [[Wikipedia:ja:Point-to-Point Protocol|Point-to-Point Protocol]] (PPP) を実装する Linux と Solaris システム用のオープンソースパッケージです。''pppd'' デーモンとして実装されており {{Pkg|xl2tpd}}, {{Pkg|pptpd}}, [[netctl]] のバックエンドとして動作します。 [[Wikipedia:ja:第3世代移動通信システム|3G]], [[Wikipedia:ja:Layer 2 Tunneling Protocol|L2TP]], [[Wikipedia:ja:PPPoE|PPPoE]] 接続は内部的に PPP プロトコルに基づいているため ppp で処理することができます。
 
'''ppp''' (Paul's PPP Package) は [[Wikipedia:ja:Point-to-Point Protocol|Point-to-Point Protocol]] (PPP) を実装する Linux と Solaris システム用のオープンソースパッケージです。''pppd'' デーモンとして実装されており {{Pkg|xl2tpd}}, {{Pkg|pptpd}}, [[netctl]] のバックエンドとして動作します。 [[Wikipedia:ja:第3世代移動通信システム|3G]], [[Wikipedia:ja:Layer 2 Tunneling Protocol|L2TP]], [[Wikipedia:ja:PPPoE|PPPoE]] 接続は内部的に PPP プロトコルに基づいているため ppp で処理することができます。
   
89行目: 88行目:
   
 
# poff ''your_provider''
 
# poff ''your_provider''
  +
  +
=== 簡単なウィザード設定 ===
  +
  +
{{Aur|pppconfig}} には pppd を簡単に設定できるダイアログインターフェイスが入っています。root で {{ic|pppconfig}} を実行して指示に従うだけで設定が作成されます:
  +
  +
# pppconfig --dialog
  +
  +
作成された設定は上のように {{ic|pon}} で呼び出すことができ、{{ic|poff}} で終了できます。
   
 
=== ブート時に pppd を起動 ===
 
=== ブート時に pppd を起動 ===
97行目: 104行目:
 
# systemctl enable ppp@''your_provider''.service
 
# systemctl enable ppp@''your_provider''.service
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
   
 
=== 自動リダイヤル ===
 
=== 自動リダイヤル ===
106行目: 113行目:
 
# kill -s HUP $PPPD_PID
 
# kill -s HUP $PPPD_PID
   
  +
これで接続がリダイアルされます。
And you have redialed the connection.
 
   
  +
{{Note|{{ic|/etc/ppp/peers/provider}} タブで {{ic|persist}} オプションが有効になっていることを確認してください。また、{{ic|holdoff 0}} を設定することで待機しないで再接続するようになります。}}
{{Note|Make sure you have {{ic|persist}} option enabled in your {{ic|/etc/ppp/peers/provider}} tab. Additionally you might want to set {{ic|holdoff 0}} to reconnect without waiting.}}
 
   
 
=== 24時間後に ISP と自動で切断 ===
 
=== 24時間後に ISP と自動で切断 ===
   
  +
{{Note|コンピュータを常時 (24時間365日) 動作させるのではない場合、このセクションはスキップしてかまいません。}}
{{Note|If you aren't running your computer always on (running 24/7) then you can skip this step.}}
 
   
If you use a flat-rate always-on connection on a computer, some providers restart your connection after 24h. That makes sure that the IP is rotated every 24h. To compensate, you can use an dynamic DNS service in combination with {{AUR|inadyn}} to compensate for the rotating IP address. But to avoid disconnects when you don't need it, you might try to restart the connection using a cron job or [[systemd]] timer at a time of day you know no one will be using the connection (e.g. at 4 AM).
+
If you use a flat-rate always-on connection on a computer, some providers restart your connection after 24h. That makes sure that the IP is rotated every 24h. To compensate, you can use an dynamic DNS service in combination with {{AUR|inadyn}}{{Broken package link|{{aur-mirror|inadyn}}}} to compensate for the rotating IP address. But to avoid disconnects when you do not need it, you might try to restart the connection using a cron job or [[systemd#Timers|systemd]] timer at a time of day you know no one will be using the connection (e.g. at 4 AM).
   
 
==== cron を使う ====
 
==== cron を使う ====
  +
  +
{{Note|[[cron]] の実装はいくつか存在しますが、ベースシステムは [[systemd/タイマー]]を使用しているためデフォルトでは何もインストールされていません。}}
   
 
root で以下の手順に従ってください:
 
root で以下の手順に従ってください:
   
Create a bash script similar to this and give it a name (e.g. {{ic|pppd_redial.sh}}):
+
以下のような bash スクリプトを作成して名前を付けて下さい (例: {{ic|pppd_redial.sh}}):
   
 
#!/bin/bash
 
#!/bin/bash
130行目: 139行目:
 
echo $message
 
echo $message
   
  +
実行権限を与えて root から実行できるパスに配置します。
Give it execute permissions and put it on a path visible to root.
 
   
  +
次に {{ic|crontab -e}} を使って cron ジョブを作成して下さい。コマンドが失敗する場合は {{ic|EDITOR}} 環境変数が設定されているか確認してください。crontab に以下を記述します:
Then create a cron job using {{ic|crontab -e}}. Check that your {{ic|EDITOR}} env variable is set if the command fails. So add anywhere in the file,
 
   
 
0 4 * * * /bin/bash /root/pppd_redial.sh
 
0 4 * * * /bin/bash /root/pppd_redial.sh
142行目: 151行目:
 
==== systemd タイマーを使う ====
 
==== systemd タイマーを使う ====
   
[[systemd]] タイマーと ''poff'' スクリプト (特に {{ic|-r}} オプション) を使って強制的に再接続する方法もあります。同じ名前の ''.service'' と ''.timer'' ファイルを作成してください:
+
[[systemd/タイマー|systemd]] タイマーと ''poff'' スクリプト (特に {{ic|-r}} オプション) を使って強制的に再接続する方法もあります。同じ名前の ''.service'' と ''.timer'' ファイルを作成してください:
 
{{hc|ppp-redial.timer|<nowiki>
 
{{hc|ppp-redial.timer|<nowiki>
 
[Unit]
 
[Unit]
169行目: 178行目:
 
=== デフォルトルート ===
 
=== デフォルトルート ===
   
  +
''pppd'' が起動する以前から設定済みのデフォルトルートがある場合、デフォルトルートは維持されるため {{ic|/var/log/errors.log}} を見て以下のような出力がないか確認してください:
If you have a preconfigured default route before the ''pppd'' is started, the default route is kept, so take a look in {{ic|/var/log/errors.log}} and if you have something like:
 
   
 
pppd[nnnn]: not replacing existing default route via ''xxx.xxx.xxx.xxx''
 
pppd[nnnn]: not replacing existing default route via ''xxx.xxx.xxx.xxx''
   
and {{ic|xxx.xxx.xxx.xxx}} is not the correct route for you
+
{{ic|xxx.xxx.xxx.xxx}} は正しいルートではない可能性があります。
   
* Create a new script in {{ic|/etc/ppp/ip-pre-up}} with this content:
+
* {{ic|/etc/ppp/ip-pre-up.d}} に以下の内容で新しいスクリプトを作成してください:
   
{{hc|/etc/ppp/ip-pre-up/10-route-del-default.sh|
+
{{hc|/etc/ppp/ip-pre-up.d/10-route-del-default.sh|
 
#!/bin/sh
 
#!/bin/sh
 
/usr/bin/route del default
 
/usr/bin/route del default
 
}}
 
}}
  +
  +
{{Note|Make sure you have a script named 'ip-pre-up' which launches *.sh in 'ip-pre-up.d' like other launch scripts do.}}
   
 
* {{ic|pppd}} サービスを[[再起動]]してください。
 
* {{ic|pppd}} サービスを[[再起動]]してください。
186行目: 197行目:
 
=== マスカレードが動作しているのにサイトが動かない ===
 
=== マスカレードが動作しているのにサイトが動かない ===
   
  +
pppoe における MTU は1492バイトです。ほとんどのサイトで使われている MTU は1500です。そのため、小さい MTU を要求するために ICMP 3:4 (fragmentation needed) パケットが送信されますが、サイトによってはファイアウォールでブロックされてしまうことがあります。
The MTU under pppoe is 1492 bytes. Most sites use an MTU of 1500. So your connection sends an ICMP 3:4 (fragmentation needed) packet, asking for a smaller MTU, but some sites have their firewall blocking that.
 
   
  +
[[iptables]] で PMTU クランプを有効にすることで問題は解決します:
Enabling the PMTU clamping in [[iptables]] can solve that:
 
   
 
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
 
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
   
  +
しかしながら、作成された iptables の設定を ''iptables-save'' で保存して、後から読み込んでも、何らかの理由で上手く行きません。他の iptables 設定がロードされた後に実行する必要があります。以下の systemd ユニットを使うことで解決できます:
Now, for some reason, just trying to save the resulting iptables configuration with ''iptables-save'' and restoring it later, does not work. It has to be executed after the other iptables configuration had been loaded. So, here is a systemd unit to solve it:
 
   
 
{{hc|pmtu-clamping.service|<nowiki>
 
{{hc|pmtu-clamping.service|<nowiki>
208行目: 219行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
そして[[有効化]]してください。
And [[enable]] it.
 
   
 
=== pppd が ppp_generic カーネルモジュールをロードできない ===
 
=== pppd が ppp_generic カーネルモジュールをロードできない ===
   
PPTPクライアント開始に、"pppd"プロセス適切なモジュールを見つけることができません。
+
PPTP クライアント起動時に、"pppd" プロセス適切なモジュールを見つけることができない場合
   
 
Couldn't open the /dev/ppp device: No such device or address
 
Couldn't open the /dev/ppp device: No such device or address
 
Please load the ppp_generic kernel module.
 
Please load the ppp_generic kernel module.
   
解決方法は、{{ic|/etc/modprobe.d/modules.conf}} ファイルを変更します
+
解決方法は、{{ic|/etc/modprobe.d/modules.conf}} ファイルを変更します:
   
 
alias char-major-108 ppp
 
alias char-major-108 ppp
   
を以下のように変更します
+
を以下のように変更します:
   
 
alias char-major-108 ppp_generic
 
alias char-major-108 ppp_generic
   
そのようなaliasが存在しない場合は追加します
+
そのような alias が存在しない場合は追加してください
   
正しいモジュールは、再起動後にロードされます。
+
再起動することで正しいモジュールロードされるようになります。

2017年10月12日 (木) 23:16時点における最新版

ppp (Paul's PPP Package) は Point-to-Point Protocol (PPP) を実装する Linux と Solaris システム用のオープンソースパッケージです。pppd デーモンとして実装されており xl2tpd, pptpd, netctl のバックエンドとして動作します。 3G, L2TP, PPPoE 接続は内部的に PPP プロトコルに基づいているため ppp で処理することができます。

インストール

公式リポジトリpppインストールしてください。

カーネルに PPPoE サポートが組み込まれていることを確認してください (デフォルトのカーネルには存在します):

$ zgrep CONFIG_PPPOE /proc/config.gz
CONFIG_PPPOE=m

設定

PPPoE

接続設定ファイルの作成:

/etc/ppp/peers/your_provider
plugin rp-pppoe.so
# rp_pppoe_ac 'your ac name'
# rp_pppoe_service 'your service name'

# network interface
eth0
# login name
name "someloginname"
usepeerdns
persist
# Uncomment this if you want to enable dial on demand
#demand
#idle 180
defaultroute
hide-password
noauth

usepeerdns オプションを使用すると、pppd/etc/ppp/resolv.conf ファイルを作成して接続の確立時に DNS アドレスを取得します。デフォルトでは、/etc/ppp/ip-up.d/00_dns フックスクリプトがこのファイルを /etc/resolv.conf に移動して、システムがネームサーバーを使えるようにします。この挙動が望ましくない場合 (例: ローカルのキャッシュ DNS を使う場合)、必要に応じて /etc/ppp/ip-up.d/00_dns.sh を編集してください。

ISP が使用している認証方法に合わせて以下のような行を /etc/ppp/pap-secrets/etc/ppp/chap-secrets に記述してください。両方のファイルに記述しても問題ありません、pppd は自動的に適切な方を使います:

someloginname * yourpassword

次のコマンドを使えば接続を開始できます:

# pppd call your_provider

もしくは、次のコマンドを使ってください:

# pon your_provider

your_provider/etc/ppp/peers のオプションファイルの名前に置き換えてください。

PPPoE 接続が正しく開始されたかどうか確認するには、システムログの pppd の出力を見て下さい:

# journalctl -b --no-pager | grep pppd

接続が成功していれば、以下のようなメッセージが表示されます:

Jul 09 22:42:33 localhost pppd[239]: Plugin rp-pppoe.so loaded.
Jul 09 22:42:33 localhost pppd[239]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.6
Jul 09 22:42:33 localhost network[184]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.6
Jul 09 22:42:33 localhost pppd[239]: pppd 2.4.6 started by root, uid 0
Jul 09 22:42:39 localhost pppd[239]: PPP session is 292
Jul 09 22:42:39 localhost pppd[239]: Connected to a0:f3:e4:4f:e3:b0 via interface enp4s0
Jul 09 22:42:39 localhost pppd[239]: Using interface ppp0
Jul 09 22:42:39 localhost pppd[239]: Connect: ppp0 <--> enp4s0
Jul 09 22:42:39 localhost pppd[239]: CHAP authentication succeeded: CHAP authentication success
Jul 09 22:42:39 localhost pppd[239]: CHAP authentication succeeded
Jul 09 22:42:39 localhost pppd[239]: peer from calling number A0:F3:E4:4F:E3:B0 authorized
Jul 09 22:42:39 localhost pppd[239]: Cannot determine ethernet address for proxy ARP
Jul 09 22:42:39 localhost pppd[239]: local  IP address 10.6.2.137
Jul 09 22:42:39 localhost pppd[239]: remote IP address 10.6.1.1
Jul 09 22:42:39 localhost pppd[239]: primary   DNS address 10.6.1.1
Jul 09 22:42:39 localhost pppd[239]: secondary DNS address 210.21.196.6

デフォルトでは /etc/ppp/peers/provider の設定がデフォルトとして扱われます。"your_provider" をデフォルトにしたい場合は、以下のようなリンクを作成することができます:

# ln -s /etc/ppp/peers/your_provider /etc/ppp/peers/provider

これで次を実行するだけで接続を開始できます:

# pon

接続を終了するには、次のコマンドを使用:

# poff your_provider

簡単なウィザード設定

pppconfigAUR には pppd を簡単に設定できるダイアログインターフェイスが入っています。root で pppconfig を実行して指示に従うだけで設定が作成されます:

# pppconfig --dialog

作成された設定は上のように pon で呼び出すことができ、poff で終了できます。

ブート時に pppd を起動

  • ppp_generic モジュールをブート時にロードするように設定してください。詳しくはカーネルモジュールを参照。
  • systemd のサービスを有効化してください:
# systemctl enable ppp@your_provider.service

ヒントとテクニック

自動リダイヤル

pppd が実行中の場合、SIGHUP シグナルをプロセスに送ることで強制的に接続をリセットできます:

# export PPPD_PID=$(pidof pppd)
# kill -s HUP $PPPD_PID

これで接続がリダイアルされます。

ノート: /etc/ppp/peers/provider タブで persist オプションが有効になっていることを確認してください。また、holdoff 0 を設定することで待機しないで再接続するようになります。

24時間後に ISP と自動で切断

ノート: コンピュータを常時 (24時間365日) 動作させるのではない場合、このセクションはスキップしてかまいません。

If you use a flat-rate always-on connection on a computer, some providers restart your connection after 24h. That makes sure that the IP is rotated every 24h. To compensate, you can use an dynamic DNS service in combination with inadynAUR[リンク切れ: アーカイブ: aur-mirror] to compensate for the rotating IP address. But to avoid disconnects when you do not need it, you might try to restart the connection using a cron job or systemd timer at a time of day you know no one will be using the connection (e.g. at 4 AM).

cron を使う

ノート: cron の実装はいくつか存在しますが、ベースシステムは systemd/タイマーを使用しているためデフォルトでは何もインストールされていません。

root で以下の手順に従ってください:

以下のような bash スクリプトを作成して名前を付けて下さい (例: pppd_redial.sh):

#!/bin/bash

message="Restarting the PPP connection @:" $(date)
pppd_id=$(pidof pppd)

kill -s HUP $pppd_id
echo $message

実行権限を与えて root から実行できるパスに配置します。

次に crontab -e を使って cron ジョブを作成して下さい。コマンドが失敗する場合は EDITOR 環境変数が設定されているか確認してください。crontab に以下を記述します:

0 4 * * * /bin/bash /root/pppd_redial.sh

cronie サービスが動くことを確認してください。動かない場合は、サービスを有効化して起動してください。

保存して終了です。これで PPPoE 接続は毎日朝4時に再起動します。

systemd タイマーを使う

systemd タイマーと poff スクリプト (特に -r オプション) を使って強制的に再接続する方法もあります。同じ名前の .service.timer ファイルを作成してください:

ppp-redial.timer
[Unit]
Description=Reconnect PPP connections daily

[Timer]
OnCalendar=*-*-* 05:00:00

[Install]
WantedBy=multi-user.target
ppp-redial.service
[Unit]
Description=Reconnect PPP connections

[Service]
Type=simple
ExecStart=/usr/bin/poff -r

タイマーを有効化して起動すれば systemd が特定時刻に再起動するようになります。

トラブルシューティング

デフォルトルート

pppd が起動する以前から設定済みのデフォルトルートがある場合、デフォルトルートは維持されるため /var/log/errors.log を見て以下のような出力がないか確認してください:

pppd[nnnn]: not replacing existing default route via xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx は正しいルートではない可能性があります。

  • /etc/ppp/ip-pre-up.d に以下の内容で新しいスクリプトを作成してください:
/etc/ppp/ip-pre-up.d/10-route-del-default.sh
#!/bin/sh
/usr/bin/route del default
ノート: Make sure you have a script named 'ip-pre-up' which launches *.sh in 'ip-pre-up.d' like other launch scripts do.
  • pppd サービスを再起動してください。

マスカレードが動作しているのにサイトが動かない

pppoe における MTU は1492バイトです。ほとんどのサイトで使われている MTU は1500です。そのため、小さい MTU を要求するために ICMP 3:4 (fragmentation needed) パケットが送信されますが、サイトによってはファイアウォールでブロックされてしまうことがあります。

iptables で PMTU クランプを有効にすることで問題は解決します:

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

しかしながら、作成された iptables の設定を iptables-save で保存して、後から読み込んでも、何らかの理由で上手く行きません。他の iptables 設定がロードされた後に実行する必要があります。以下の systemd ユニットを使うことで解決できます:

pmtu-clamping.service
[Unit]
Description=PMTU clamping for pppoe
Requires=iptables.service
After=iptables.service

[Service]
Type=oneshot
ExecStart=/usr/bin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

[Install]
WantedBy=multi-user.target

そして有効化してください。

pppd が ppp_generic カーネルモジュールをロードできない

PPTP クライアント起動時に、"pppd" プロセスが適切なモジュールを見つけることができない場合:

Couldn't open the /dev/ppp device: No such device or address
Please load the ppp_generic kernel module.

解決方法は、/etc/modprobe.d/modules.conf ファイルを変更します:

alias char-major-108 ppp

を以下のように変更します:

alias char-major-108 ppp_generic

そのような alias が存在しない場合は追加してください。

再起動することで正しいモジュールがロードされるようになります。