CentOS6でLAN内サーバーからWANにアクセスする(ルータ構築)
CentOS6でLAN内サーバーからWANにアクセスする(ルータ構築)
環境
・サーバーA
ゲストOS(CentOS6)
eth0:192.168.10.30
eth1:10.0.10.30
※eth0がWAN(グローバルネットワーク)に繋がっている
・サーバーB
ゲストOS(CentOS6)
eth0:10.0.10.40
※WANにつながっていない
サーバーBでの設定
固定IP設定
vi /etc/sysconfig/network-scripts/ifcfg-eth0
※抜粋
BOOTPROTO="none" ONBOOT="yes" IPADDR=10.0.10.40 PREFIX=24 NETMASK=255.255.255.0 DNS1=10.0.10.30 DNS2=10.0.10.30
サーバーBが直接繋がっているネットワークは、サーバーAしか無い為、デフォルトゲートウェイでサーバーAのIPを設定する。
vi /etc/sysconfig/network
NETWORKING=yes GATEWAY=10.0.10.30
ネットワーク再起動
/etc/init.d/network restart
デフォルトゲートウェイが反映されない場合があるのでOS再起動
reboot
ルーティングテーブル確認
[root@web ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 10.0.10.30 0.0.0.0 UG 0 0 0 eth0
ここまでの設定でサーバーBの全ての通信は10.0.10.30をゲートウェイとして通信される。
サーバーAの設定
IP設定
WAN側NIC
eth0
vi /etc/sysconfig/network-scripts/ifcfg-eth0
※抜粋
BOOTPROTO="none" ONBOOT="yes" IPADDR=192.168.10.30 PREFIX=24 GATEWAY=192.168.10.1 NETMASK=255.255.255.0 DNS1=192.168.10.1 DNS2=192.168.10.1
LAN側NIC
eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1
※抜粋
BOOTPROTO="none" ONBOOT="yes" IPADDR=10.0.10.30 PREFIX=24 NETMASK=255.255.255.0 GATEWAY=10.0.10.40
vi /etc/sysconfig/network
NETWORKING=yes GATEWAY=192.168.10.1
networkファイルでゲートウェイを設定する場合は/etc/sysconfig/network-scripts/route-eth*の空ファイルが無い事を確認する。
空ファイルがあるとデフォルトゲートウェイが正常に反映されない事があった。
ネットワーク再起動
/etc/init.d/network restart
デフォルトゲートウェイが反映されない場合があるのでOS再起動
reboot
ルーティングテーブル確認
[root@lb Desktop]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
サーバーAのデフォルトゲートウェイは192.168.10.1、
10.0.10.のゲートウェイは10.0.10.40。
IPフォワード設定
sysctl設定でIPフォワードの設定
vi /etc/sysctl.conf
1に設定
net.ipv4.ip_forward = 1
反映
sysctl -p
再起動
reboot
iptables設定
iptablesコマンドを実行して設定。
ただし、これだと再起動時に設定が消えるのでiptables用スクリプトを組んだ方が良いかも。
iptables -A FORWARD -i eth1 -o eth0 -s 10.0.10.0/255.255.255.0 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o $WAN_NIC -s 10.0.10.0/255.255.255.0 -j MASQUERADE
上記3行を簡単に説明すると、
1.
-i パケットを受信するインターフェイス
-o パケットを送信するインターフェイス
-s パケットの送信元
2.ステートフル性を確認し、「--state ESTABLISHED,RELATED」となっているものに通過許可
3.
-t nat natテーブルを使用
-A POSTROUTING POSTROUTINGチェインを使用し、内部ネットから外部ネットへ出ていくパケットのソースIPを書き換える
-o eth0 パケットが出ていくインターフェイス(eth0)を指定
-s $internal_net ソース側ネットワークアドレス(192.168.0.0/24)
-j MASQUERADE IPマスカレードを行う
IPマスカレードの設定を確認
[root@lb ~]# iptables -t nat -nL -v Chain PREROUTING (policy ACCEPT 1186 packets, 81027 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 6 packets, 460 bytes) pkts bytes target prot opt in out source destination 2 168 MASQUERADE all -- * eth0 10.0.10.0/24 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 30 packets, 1900 bytes) pkts bytes target prot opt in out source destination
10.0.10.0/24をeth0にマスカレードしている。
疎通確認
サーバーAからサーバーB
[root@lb Desktop]# ping 10.0.10.40 PING 10.0.10.40 (10.0.10.40) 56(84) bytes of data. 64 bytes from 10.0.10.40: icmp_seq=1 ttl=64 time=0.231 ms 64 bytes from 10.0.10.40: icmp_seq=2 ttl=64 time=0.158 ms 64 bytes from 10.0.10.40: icmp_seq=3 ttl=64 time=0.501 ms
サーバーAからWANネットワーク
※ここではyahoo宛て
[root@lb Desktop]# ping 183.79.198.79 PING 183.79.198.79 (183.79.198.79) 56(84) bytes of data. 64 bytes from 183.79.198.79: icmp_seq=1 ttl=46 time=44.7 ms 64 bytes from 183.79.198.79: icmp_seq=2 ttl=46 time=42.9 ms
サーバーBからWAN
つながらない・・
[root@web ~]# ping 183.79.198.79 PING 183.79.198.79 (183.79.198.79) 56(84) bytes of data. 64 bytes from 183.79.198.79: icmp_seq=1 ttl=45 time=43.4 ms 64 bytes from 183.79.198.79: icmp_seq=2 ttl=45 time=43.2 ms
出来た!
注意ポイント
ちなみに、この設定かなりはまりました。
正直あきらめそうになった。。
ハマったポイントとして以下を注意。
・デフォルトゲートウェイの設定
LANネットワークサーバーのデフォルトゲートウェイはルータのIPとなっている事。
デフォルトゲートウェイの設定出来てると思いきや、ちゃんと反映されてなかったりしてハマった。
設定後は「route -n」コマンドでデフォルトゲートウェイ反映が正常な事を確認する事。
・iptablesでのIPマスカレード(IPフォワード)設定
ルータの為にはiptablesの設定が必要と知らずにまずハマる。
iptablesの設定が必要とわかった後も正しい設定にハマる。。
以下のようにpingでLANネットワークサーバーからWAN側に出れない時はIPフォワード周り(iptablesの設定とか)の可能性が高いです。
pingで固まる時も。
[root@web ~]# ping 183.79.198.79 PING 183.79.198.79 (183.79.198.79) 56(84) bytes of data. From 10.0.10.30 icmp_seq=1 Destination Host Prohibited From 10.0.10.30 icmp_seq=2 Destination Host Prohibited
以上で、基本的なルータ作成は完了。
後は必要に応じてiptablesで許可、拒否設定等行う。
後、LANネットワークのサーバーではDNSによる名前解決が出来ないみたいなので、別途DNSサーバーを構築する必要があり。
↓下記記事で構築しました。
toriaezu-engineer.hatenablog.com