■CentOS 4.4 + rp-pppoe
ついにADSLからB-FLET'Sに変更したです。マンションタイプでしかもVDSL方式なので、100Mなんてのは夢のまた夢なんですが、工事に来て
くれた兄ちゃんが動作確
認をかねて持ち込みPCで測定したところ40M以上出ているそうで。ほぼ限界に近い、よい数値だそうです。
ところが。いざ自分の環境で試してみると、この日のために新調したブロードバンドルータがえらく不安定でフリーズしまくり。仕方なく古いブロードバンド
ルータを使ったら、こいつがボトルネックになってせいぜい15M〜20Mしか出ない。そこで、せっかく常時稼働のLinux
boxが動いていることだし、ルータ兼用にしてしまいましょうと。いわば避難措置です。結果、40M以上の速度を記録できたのでよしとしましょう。
■準備
家庭内ネットワークは 192.168.1.0/24 で、Linuxサーバは192.168.1.6 (eth0)
のアドレスを振っています。こいつはそのままLAN側のネットワークのゲートウェイにすることにします。アドレスもそのまま。eth0側は一切変更しませ
ん。
NICをもう一枚追加し(eth1)、こちらをWAN側に接続することにします。買ってきて挿して電源入れたら認識しました。めでたしめでたし。VDSL
装置(ADSLならADSLモデム)とeth1をストレートケーブルで結線しますが、eth1には特にIPアドレスを振る必要はありません。eth1の設
定ファイルはこんな感じで、認識してさえくれればOK。
[/etc/sysconfig/network-scripts/ifcfg-eth1]
DEVICE=eth1
ONBOOT=no
HWADDR=00:90:FE:44:**:**
【物理接続模式図】
物理的にはVDSL装置とeth1を結線しますが、eth1そのものはIPアドレスを持っておらず、PPPoEの通信はeth1上に作成される仮想イン
ターフェイスppp0を通して行われることになります。っつーことは、理屈上はNICが一つでもいいような気もしますが、内と外で物理的に別れている方が
精神衛生上もよろしいのではないかと。
■PPPoEの設定
PPPoEにはrp-pppoe
を使用します。CentOSには標準で用意されているので、特に意識しなくてもふつうにインストールされてるはずです。インストールされていなければ追加
しましょう。
○インストール確認
# rpm -qa|grep pppoe
rp-pppoe-3.5-22
○セットアップ
セットアップは、adsl-setupコマンドを実行して、対話式で進めます。赤文字が入力箇所。当然のことながら、契約プロバイダのログインID、パス
ワード、DNSサーバのアドレス等は事前に準備しておきます。
# adsl-setup
Welcome to the ADSL client setup. First, I will run some checks on
your system to make sure the PPPoE client is installed properly...
LOGIN NAME
Enter your Login Name (default root): プロバイダのログインID
>>>
プロバイダから発行されたログインIDを入力します。
INTERFACE
Enter the Ethernet interface connected to the ADSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethX, where 'X' is a number.
(default eth0): eth1
>>>
PPPoEに使用するインターフェイスの指定。
Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped. If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses. You may have some problems with demand-activated links.
Enter the demand value (default no): no
>>> 常時接続の場合は no を指定します。
DNS
Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide dynamic DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
Enter the DNS information here: DNSサーバのIPアドレス(プライマリ)
Please enter the IP address of your ISP's secondary DNS server.
If you just press enter, I will assume there is only one DNS server.
Enter the secondary DNS server address here: DNSサーバのIPアドレス(セカンダリ)
>>>
プロバイダに指定されたDNSサーバのアドレスを指定します。
PASSWORD
Please enter your Password: (パスワード入力)
Please re-enter your Password: (パスワード入力)
>>>
ログイン用のパスワードを確認も含めて2回入力します。
USERCTRL
Please enter 'yes' (two letters, lower-case.) if you want to allow
normal user to start or stop DSL connection (default yes): yes
>>> デフォルトのまま yes
なんですが、なぜに two letters(2文字) ??
FIREWALLING
Please choose the firewall rules to use. Note that these rules are
very basic. You are strongly encouraged to use a more
sophisticated
firewall setup; however, these will provide basic security. If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself. Otherwise, the firewall rules will
deny
access to all standard servers like Web, e-mail, ftp, etc. If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.
The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are
responsible
for ensuring the
security of your machine. You are STRONGLY
recommended to
use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing
workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
Choose a type of firewall (0-2): 2
>>> PC1台で利用するなら 1、Linux
Boxをルータにするなら 2 を選択します。
Start this connection at boot time
Do you want to start this connection at boot time?
Please enter no or yes (default no):yes
>>>
起動時にPPPoE接続しますか? yes!
ここまで入力が終わると、設定の確認画面となります。
** Summary of what you entered **
Ethernet Interface: eth1
User name: プロバイダのログインID
Activate-on-demand: No
Primary DNS: DNSサーバのアドレス(プライマリ)
Secondary DNS: DNSサーバのアドレス(セカンダリ)
Firewalling: MASQUERADE
User Control: yes
Accept these settings and adjust configuration files (y/n)? y
>>> 正しければ y で完了。間違いがあれば
n で最初に戻ってやり直し。
完了すると、設定内容がファイルに保存されます。保存先は表示されるとおりの場所です。
ググると出てくる pppoe.conf というファイルはCentOSでは作成されません。
Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0
Adjusting /etc/resolv.conf
(But first backing it up to /etc/resolv.conf.bak)
Adjusting /etc/ppp/chap-secrets
and /etc/ppp/pap-secrets
(But first backing it up to /etc/ppp/chap-secrets.bak)
(But first backing it up to /etc/ppp/pap-secrets.bak)
○接続してみる
# adsl-connect
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
CHAP authentication succeeded
local IP address 61.*.*.* <------- ppp0
に付与されるIPアドレス
remote IP address 219.*.*.* <------- プロバイダ側の対向ルータのIPアドレス
※うちは固定IPアドレスなので、local IP
addressは常に固定です。公開してるのでアドレス伏せる必要もないんですが、将来何かの事情でアドレスが変更になるかもしれないので伏せておきま
す。
■ルータにするための設定
○ip_forwardを有効化する。
# echo 1 >
/proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
[/etc/sysctl.conf]
7c7
< net.ipv4.ip_forward = 0
---
> net.ipv4.ip_forward = 1
○iptablesの設定
ルータとして使用するためのIPマスカレードの設定ですが、SNAT
の指定でIPアドレスを指定できるのは固定IPだからです。動的IPの方は、まねをしてはいけません。
[/etc/ppp/firewall-masq]
#!/bin/sh
iptables -F -t nat
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 61.*.*.*
次にフィルタリングですが、もともとlokkitで生成した設定ファ
イル(/etc/sysconfig/iptables)があるの
で、フィルタルールはこっちに追加しておきます。
firewall-masq の方に全部まとめてしまってもいいのかもしれませんが、気にしないでおきます。
natの記述が両方に入っているのはなんでだろ。たぶん、設定が最終的に煮詰まった段階で、
service iptables save
で保存したからだと思われます。
[/etc/sysconfig/iptables]
# Generated by iptables-save v1.2.11 on Sun Jun 18 16:37:59 2006
*nat
:PREROUTING ACCEPT [496:41976]
:POSTROUTING ACCEPT [695:53521]
:OUTPUT ACCEPT [779:59708]
-A POSTROUTING -o ppp0 -j SNAT --to-source 61.*.*.*
COMMIT
# Completed on Sun Jun 18 16:37:59 2006
# Generated by iptables-save v1.2.11 on Sun Jun 18 16:37:59 2006
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16462:2488768]
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 135:139 -j DROP
-A OUTPUT -o ppp0 -p udp -m udp --dport 135:139 -j DROP
-A OUTPUT -o ppp0 -p tcp -m tcp --sport 135:139 -j DROP
-A OUTPUT -o ppp0 -p udp -m udp --sport 135:139 -j DROP
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 445 -j DROP
-A OUTPUT -o ppp0 -p udp -m udp --dport 445 -j DROP
-A OUTPUT -o ppp0 -p tcp -m tcp --sport 445 -j DROP
-A OUTPUT -o ppp0 -p udp -m udp --sport 445 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ppp0 -s 192.168.0.0/16 -j LOG --log-level debug
-A INPUT -i ppp0 -s 172.16.0.0/12 -j LOG --log-level debug
-A INPUT -i ppp0 -s 10.0.0.0/8 -j LOG --log-level debug
-A INPUT -i ppp0 -s 192.168.0.0/16 -j DROP
-A INPUT -i ppp0 -s 172.16.0.0/12 -j DROP
-A INPUT -i ppp0 -s 10.0.0.0/8 -j DROP
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 110 -j
ACCEPT
-A INPUT -p tcp -i ppp0 -m state --state NEW -m tcp --dport 443 -j
ACCEPT
-A INPUT -p udp -i ppp0 -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -i ppp0 -m state --state NEW -m udp --dport 123 -j
ACCEPT
-A INPUT -j LOG --log-level debug
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
○フィルタリングルールの簡単な説明
・LAN側のインターフェイスは eth0、WAN側のインターフェイスは ppp0 である。
・LAN側からWAN側への通信は原則として全許可。
・LAN側からWAN側へのwindowsファイル共有の通信は拒否。
・WAN側に対するプライベートアドレスからの通信は全拒否。(IPスプーフィング対策)
・WAN側に対する FTP/SSH/SMTP/DNS/HTTP/POP3/HTTPS/NTP の通信は許可。
・WAN側に対する上記以外の通信は全拒否。
サーバとして公開するため、最低限のポートは開放しています。各ポートに対するアクセス制限等のセキュリティ対策を別途実施していることは言うまでもあり
ません。
■設定ファイルの内容
参考までに、私の設定ファイルを公開します。
「ログインID」「パスワード」は実際の値が入ります。なお、パスワードは平文です。
[/etc/sysconfig/network-scripts/ifcfg-ppp0]
USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=yes
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=MASQUERADE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=yes
SYNCHRONOUS=no
ETH=eth1
PROVIDER=DSLppp0
USER=ログインID
PEERDNS=no
DEMAND=no
[/etc/ppp/chap-secrets]
# Secrets for authentication using CHAP
# client server
secret
IP addresses
"ログインID"
* "パスワード"
[/etc/ppp/pap-secrets]
# Secrets for authentication using PAP
# client server
secret
IP addresses
"ログインID"
* "パスワード"
この設定で半年以上ノントラブルで運用してます。
(2007.2.18)
|