NetworkManager

NetworkManagerが原因だった?
Posted on 2013年4月1日 by Qsaku

(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