「Pppd」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) |
Kusanaginoturugi (トーク | 投稿記録) |
||
225行目: | 225行目: | ||
alias char-major-108 ppp_generic |
alias char-major-108 ppp_generic |
||
− | aliasがない場合は追加します。 |
+ | そのようなaliasが存在しない場合は追加します。 |
正しいモジュールは、再起動後にロードされます。 |
正しいモジュールは、再起動後にロードされます。 |
2015年7月31日 (金) 15:33時点における版
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
ブート時に pppd を起動
# systemctl enable ppp@your_provider.service
Tips and tricks
自動リダイヤル
pppd が実行中の場合、SIGHUP
シグナルをプロセスに送ることで強制的に接続をリセットできます:
# export PPPD_PID=$(pidof pppd) # kill -s HUP $PPPD_PID
And you have redialed the connection.
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 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).
cron を使う
root で以下の手順に従ってください:
Create a bash script similar to this and give it a name (e.g. pppd_redial.sh
):
#!/bin/bash message="Restarting the PPP connection @:" $(date) pppd_id=$(pidof pppd) kill -s HUP $pppd_id echo $message
Give it execute permissions and put it on a path visible to root.
Then create a cron job using crontab -e
. Check that your EDITOR
env variable is set if the command fails. So add anywhere in the file,
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 が特定時刻に再起動するようになります。
トラブルシューティング
デフォルトルート
If you have a preconfigured default route before the pppd is started, the default route is kept, so take a look in /var/log/errors.log
and if you have something like:
pppd[nnnn]: not replacing existing default route via xxx.xxx.xxx.xxx
and xxx.xxx.xxx.xxx
is not the correct route for you
- Create a new script in
/etc/ppp/ip-pre-up
with this content:
/etc/ppp/ip-pre-up/10-route-del-default.sh
#!/bin/sh /usr/bin/route del default
pppd
サービスを再起動してください。
マスカレードが動作しているのにサイトが動かない
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.
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
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:
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
And enable it.
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が存在しない場合は追加します。
正しいモジュールは、再起動後にロードされます。