NetworkManagerが原因だった?
CentOS6
LANからインターネットにアクセスするために
ルータ仕様になっているサーバーが2台。
1台はまともぽいのですが、最近構築したもう1台でインターネットを
覗きに行くと、特定ページの表示に時間がかかります。
ひどい時はタイムアウトで表示しません。
何事もなくサクッと開くページもあるのですが。
最初はファイヤーウォール(iptables)の設定かと思い、
フラグメント化されたパケットの処理や、内部ネットワークからの
要求に対する外部からの返答などをいじってみましたがNGでした。
2台のどこが違う!?
2日ほど考えたあげく思いついたのが、ダメルータは時間がないところ
でやったため、簡単に設定できるNetworkMnagerを使用したこと。
そこで昔ながらのnetworkに変更し、rp-pppoeをインストールして設定しなおし。
# yum -y install rp-pppoe |
まともな一台はIP16のunnumberedですが、こいつは固定IP1個で
MASQUERADEするためにNICを2枚抱いてます。
eth1をpppoe、eth0がLAN側で設定してあります。
# /etc/init.d/NetworkManager stop
pppoeで使うため、eth1の設定はほとんどなく、
また自動起動させません。
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=no
以下のコマンドで対話式に設定します。
プロバイダへの接続情報(ユーザー名・パスワード)を用意しておきます。
# pppoe-setup(変更以外はディフォルトのままENter)
Enter your Login Name (default root): xxx@xxxx.xxxxx.jp
(default eth0): eth1
Enter the DNS information here: xxx.xxx.xxx.xxx
Enter the secondary DNS server address here: xxx.xxx.xxx.xxx
Please enter your Password:xxxxx
Please re-enter your Password:xxxxx
Choose a type of firewall (0-2): 2
Please enter no or yes (default no): yes
設定の確認
# cat /etc/sysconfig/network-scripts/ifcfg-ppp0
USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=no
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=NONE
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=xxx@xxxx.xxxxx.jp
PEERDNS=no
DEMAND=no
これらの設定でサーバー自体はインターネットにアクセス
できるのですが、内部ネットワークからもアクセスできるように
ルーター仕様にしなくてはいけません。
ルータにするための設定
1)NIC
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=”eth0″
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.x.x
PREFIX=24
DNS1=127.0.0.1
DOMAIN=oba-q.com
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=”System eth0″
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:1D:7D:07:82:C3
LAST_CONNECT=1364741567
2)NAT機能
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
#sysctl -p
3) ファイヤーウォールの変更
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# iptables -A INPUT -s 192.168.xx.0/24 -j ACCEPT
# iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
# iptables-save > /ets/sysconfig/iptables
# /etc/init.d/iptables restart
上記設定により、内部ネットワークからインターネットへのアクセス、
要求によるインターネットからの返答に穴をあけました。
サーバー起動時に自動的にファイアウォールのルールが適用されるおまじない。
# /etc/init.d/iptables save
ネットワーク起動
# /etc/init.d/network start
プロバとの接続も切断されるので、再接続するのに多少時間がか
かりますが、これで内部ネットワークからもアクセス可能になります。
おっと一つ忘れていました。
現在では必要ないかもしれませんが、TCPMSSターゲットのおまじないも
ルールに組み込んでおきます。
# iptables -A FORWARD -p tcp -m tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
↑ 一行です
MSS値はMTU値から40バイト引いた値で、直接数値を書き込める書式も
あるのですが、その昔エラーになったことがあり、それ以来自動数値設定を
してくれる上記書式を採用しています。
ジャジャジャ~ン!お待ちかねの結果発表です。
どのページもサクサク表示です。
100MbpsのNICなですが上り下りとも60Mbps。
な~んの問題もありませぬ。
ちなみにいまどきのrp-pppoeはインストールしただけでカーネルモードで
動作するようになったようです。
最初のころはカーネルの再コンパイルが必要で面倒だったのですが、
次にpppoe.confに
LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
と記載するだけでOKになり、楽ちんできると喜んだものでした。
で、現在は何もしなくてもCPU負荷は4コアの内の一つだけが、1%程度
使用されるることを確認しましたので、カーネルモードで稼働しています。
(ユーザーモードだとCPU負荷が大きく、しかもどうしようもなく遅い)
結論
原因は故障・・・
いやいや楽しようと使ったNetworkManagerのせいだと判明しました。
使えないNetworkManagerなんて当然アンインストールしてやります!
参考記事
最近のNMはまともなようです。
HOME