「Pppd」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「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 |
+ | 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 で以下の手順に従ってください: |
||
− | + | 以下のような 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'' |
||
− | + | {{ic|xxx.xxx.xxx.xxx}} は正しいルートではない可能性があります。 |
|
− | * |
+ | * {{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クライアント |
+ | 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 で処理することができます。
目次
インストール
カーネルに 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 を起動
# systemctl enable ppp@your_provider.service
ヒントとテクニック
自動リダイヤル
pppd が実行中の場合、SIGHUP
シグナルをプロセスに送ることで強制的に接続をリセットできます:
# export PPPD_PID=$(pidof pppd) # kill -s HUP $PPPD_PID
これで接続がリダイアルされます。
24時間後に ISP と自動で切断
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 を使う
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
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 が存在しない場合は追加してください。
再起動することで正しいモジュールがロードされるようになります。