会社では相変わらずさくらのクラウド上で色々やっていますが、以前のGentooの記事が好評だったので今回も同じくGentooでいこうと思います!
今回は図のような構成でごく普通のGatewayサーバーを構築し、矢印で示したサーバーがインターネットに出られるようにします。
まずはカーネルのコンフィグレーションですが、CONFIG_IP_NF_TARGET_MASQUERADEを有効にしておきます。
[root@gateway-left] # uname -a
Linux gateway-left 4.0.5-gentoo #1 SMP Fri Aug 14 20:27:22 JST 2015 x86_64 Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz GenuineIntel GNU/Linux
[root@gateway-left] # zgrep CONFIG_IP_NF_TARGET_MASQUERADE /proc/config.gz
CONFIG_IP_NF_TARGET_MASQUERADE=m
またsysctlでnet.ipv4.ip_forwardを1に設定します。
[root@gateway-left] # sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
iptablesはこんな感じにしてみます。なお、eth0がWAN側インタフェース、eth1がLAN側インタフェースです。
[root@gateway-left] # iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
671 100K ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT icmp -- any any anywhere anywhere
1 60 ACCEPT tcp -- any any anywhere anywhere tcp dpt:22 ctstate NEW limit: up to 2/min burst 3 mode srcip-dstip
0 0 DROP tcp -- any any anywhere anywhere multiport dports epmap,netbios-ssn,microsoft-ds
0 0 DROP udp -- any any anywhere anywhere multiport dports epmap,netbios-ns,netbios-dgm,microsoft-ds
15 764 LOG_AND_DROP all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
36 12342 ACCEPT all -- eth1 any anywhere anywhere
31 21996 ACCEPT all -- eth0 any anywhere 172.x.0.0/16
Chain OUTPUT (policy ACCEPT 506 packets, 66758 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any lo anywhere anywhere
0 0 LOG_AND_DROP all -- any eth0 anywhere 255.255.255.255
Chain LOG_AND_DROP (2 references)
pkts bytes target prot opt in out source destination
15 764 LOG all -- any any anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix "(IPTABLES_DROPPED)"
15 764 DROP all -- any any anywhere anywhere
natテーブルはこんな感じで。
[root@gateway-left] # iptables -L -v -t nat
Chain PREROUTING (policy ACCEPT 2155 packets, 139K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 30 packets, 1931 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 30 packets, 1931 bytes)
pkts bytes target prot opt in out source destination
11 10788 MASQUERADE all -- any eth0 anywhere anywhere
Gateway経由でインターネットにでる各サーバーの設定はこんな感じです。172.x.y.zがGatewayのIPアドレスです。
$ cat /etc/conf.d/net.eth1
config_eth1="172.x.a.b/16"
routes_eth1="default via 172.x.y.z"
dns_servers_eth1="172.x.v.1 172.x.v.2"
dns_domain_eth1="example.com"
以上、お手軽ですね。
ところでさくらのクラウドにはVPCルーターというアプライアンスが用意されており、これを使うともっとお手軽にネットワークを構築することができます。