裏セグメントのホスト(たとえばVPCのEIPついてないのとかDBやNASなど裏においときたいやつ)
から名前解決とかメールとかyumとかwgetとか時刻同期とかメールしたい!
という場合の設定についてざっくりまとめさせていただきます。
とりあえず2パターンあります。
NATする(AWSの場合NATインスタンスを使う)パターンと、
グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン。
★NATする(AWSの場合NATインスタンスを使う)パターン
db側はInternetGatewayつけてなくてパブリックでなくローカルなルーティングな場合、
名前解決をはじめ外に出られないです。(※)
NATインスタンスを作るのも勿体ないと、複数NICがついたwebをnat化しようとしたところ、
マルチインタフェースなインスタンスはNATの出口に出来ない模様でした。
(※)最近新しくとったアカウントはVPCオンリーになっていてそちらだとグローバルIPがどんどん勝手に振られるようです。。(EIPつけざるをえない仕様)
NATインスタンス作成方法は以下URLから
Amazon VPCトレーニング-NATインスタンスの作成方法
VPC詳細 -ほぼ週刊AWSマイスターシリーズ第7回-
Amazon VPCでNATを使ってPublic SubnetとPrivate Subnetを分ける
一番上のスライドのとおりでnatインスタンスを作成可能。
ざっくりいうと、
VPCサブネットをつくり、
“ami-vpc-nat”AMIでNATインスタンスを作成し、
NATインスタンスの”Change Source/DestCheck”をDisableにし、
NATインスタンスにEIPをアソシエートし、
PublicSubnetのRouterTableにNATインスタンスのIDを追加し、
必要に応じてNATインスタンスのSecurityGroupを設定する
そのほか、一般的なルータ化設定方法と同様に、
インスタンス作成後にiptablesでnatのルール設定が必要になる模様。
1 2 3 4 |
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE service iptables save iptables --list -t nat |
上記スライドのとおりNATインスタンスをデフォルトゲートウェイにするルーティング設定も必要
forwardingの設定も必要
1 2 3 4 5 6 7 8 |
# vi /etc/sysctl.conf ---------------------------------------------------- net.ipv4.ip_forward = 0 ↓ net.ipv4.ip_forward = 1 ---------------------------------------------------- # sysctl -p |
ルータ化設定方法(NAT)
natテーブルを利用したLinuxルータの作成
NAT化したらクライアント側のデフォルトゲートウェイをNATサーバに指定します
新しいデフォルトゲートウェイ追加
1 2 3 4 |
# /sbin/route add default gw 10.0.0.251 dev eth0 # netstat -rn |
古いデフォルトゲートウェイ削除
1 2 3 |
# /sbin/route del default gw 10.0.0.2 dev eth0 # netstat -rn |
確認
1 2 |
# ping yahoo.co.jp |
★グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン
とりあえず名前解決から。bindを使う場合です。
・内部DNSを構築
参考:
内部向け DNS サーバの構築
@DNSサーバ側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# rpm -qa|grep bind bind-utils-9.3.6-20.P1.el5_8.5 ypbind-1.19-12.el5_6.1 bind-libs-9.3.6-20.P1.el5_8.5 yum install bind.x86_64 bind-devel.x86_64 Installed: bind.x86_64 30:9.3.6-20.P1.el5_8.6 bind-devel.x86_64 30:9.3.6-20.P1.el5_8.6 Dependency Installed: bind-libs.i386 30:9.3.6-20.P1.el5_8.6 Dependency Updated: bind-libs.x86_64 30:9.3.6-20.P1.el5_8.6 bind-utils.x86_64 30:9.3.6-20.P1.el5_8.6 vi /etc/named.conf --------------- options { // zone ファイルの格納場所 directory "/var/named"; // BIND の利用を許す範囲を指定 allow-query { // 自分自身( localhost ) 127.0.0.1; // 10.0.0.* ( Subnet 255.255.255.0 ) 10.0.0.0/24; }; // スレーブ DNS のアドレスを記述。内向き DNS の場合は必要ないが一応記載 。 allow-transfer { // 自分自身( localhost ) 127.0.0.1; // 10.0.0.* ( Subnet 255.255.255.0 ) 10.0.0.0/24; }; // 自前で名前解決できないとき、まずはプロバイダの DNS へ聞きに行く様にする。 // LAN 内名前解決のパフォーマンス向上にもつながるらしい。 2003/07/29 追記 forwarders { 211.132.xxx.xxx; // ISAOのプライマリ DNS の IP アドレス 211.132.xxx.xxx; // ISAOのセカンダリ DNS の IP アドレス }; }; // ルート DNS の情報 zone "." { // ルート DNS の情報である事を明示 type hint; // ファイル名 file "named.ca"; }; // localhost の正引きの設定 zone "localhost" { // Master DNS Serverであることを示す type master; // ファイル名 file "localhost.zone"; }; // localhost の逆引きの設定 zone "0.0.127.in-addr.arpa" { // Master DNS Serverであることを明示 type master; // ファイル名 file "0.0.127.in-addr.arpa"; }; // 10.0.0.* の逆引きの設定 zone "0.0.10.in-addr.arpa" { // Master DNS Serverであることを明示 type master; // ファイル名 file "empty"; }; --------------- wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root cp named.root /var/named/named.ca vi /var/named/empty ----------------------------------------------------------- ; BIND reverse data file for empty rfc1918 zone ; ; DO NOT EDIT THIS FILE - it is used for multiple zones. ; Instead, copy it, edit named.conf, and use that copy. ; $TTL 86400 @ IN SOA localhost root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS localhost. ----------------------------------------------------------- vi /var/named/localhost.zone ---- $TTL 86400 @ IN SOA @ root ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL IN NS @ IN A 127.0.0.1 ---- vi /var/named/0.0.127.in-addr.arpa ---- $TTL 86400 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL IN NS localhost. 1 IN PTR localhost. ---- vi /etc/sysconfig/named OPTIONS="-4" /etc/init.d/named start ps -ef|grep named named 4801 1 0 12:02 ? 00:00:00 /usr/sbin/named -u named -4 chkconfig named on |
@DNSクライアント側
1 2 3 4 5 6 7 8 9 10 11 12 |
vi /etc/resolv.conf --- nameserver 10.0.0.10 nameserver 10.0.0.2 # dig +noall +answer www.isao.net www.isao.net. 1800 IN A 218.42.137.171 # dig +noall +answer www.yahoo.co.jp www.yahoo.co.jp. 372 IN CNAME www.g.yahoo.co.jp. www.g.yahoo.co.jp. 17 IN A 124.83.203.233 |
※なぜbindかというと慣れてるからです。
unboundのほうが簡単なようです。以下参考。
Unboundをインストールしてみた
これだけだと名前は解決できるがyumはできないです。
bindだけでは名前しか解決できないので、
squidとntpdをいれてnasからのyumとwgetとntpdateを行えるようにします。
・フォワードプロキシを構築しyumとwgetとcurlをする
※webサーバフロントエンドを高速化するリバースプロキシではありません。
コンテンツをキャッシュして内部からのダウンロードを高速化(または規制)するほうの使い方です。
@プロキシサーバ側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
yum install squid.x86_64 --enablerepo=epel Installed: squid.x86_64 7:2.6.STABLE21-6.el5 cp -p /etc/squid/squid.conf{,.`date +%Y%m%d`} vim /etc/squid/squid.conf diff /etc/squid/squid.conf{,.`date +%Y%m%d`} 590d589 < acl lan src 10.0.0.0/255.255.255.0 638d636 < http_access allow lan 2795,2797d2792 < header_access X-Forwarded-For deny all < header_access Via deny all < header_access Cache-Control deny all 3012d3006 < visible_hostname xx-stg.isao.net 4284c4278 < forwarded_for off --- > # forwarded_for on service squid start chkconfig squid on netstat -lnpt|grep squid tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 5010/(squid) |
@クライアント側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
vi /etc/yum.conf -- proxy=http://10.0.0.10:3128/ -- yum grouplist vi ~/.wgetrc -- http_proxy=10.0.0.10:3128 -- vi ~/.curlrc -- proxy=http://10.0.0.10:3128 -- |
※wget等のためのプロキシの指定
そのた、gitやgemやvagrantなんかはこちらに書いてありました。
リポジトリのインストールは以下を参考に
RPMforge EPEL ELRepo Remi リポジトリインストール
・時刻同期のためにntpdを立てる
@ntpサーバ側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
touch /etc/ntp.drift cp -p /etc/ntp.conf{,.org} vi /etc/ntp.conf --- server ntp.nict.jp server ntp.jst.mfeed.ad.jp driftfile /etc/ntp.drift --- service ntpd start chkconfig ntpd on ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ntp.nict.jp 133.243.238.243 2 u 2 64 3 33.951 -102.58 3.204 ntp2.jst.mfeed. 210.173.160.86 2 u 2 64 3 2.568 -102.27 2.897 |
@ntpクライアント側
1 2 3 4 5 6 7 8 |
ntpdate 10.0.0.10 # ntpdate -b 10.0.0.10 24 Jan 14:58:55 ntpdate[6730]: step time server 10.0.0.10 offset 0.070994 sec # crontab -e # crontab -l 0 * * * * /usr/sbin/ntpdate -bs 10.0.0.10 > /dev/null 2>&1 |
クラウドの場合時刻がずれやすいと聞いたことがありますし、時刻がずれるとログの時刻やDBの時刻のカラムがずれたりなどで、
アプリケーションへの影響が深刻になる可能性があるかもしれません。忘れずに設定が必要かと思います。
★LAN内部からMTAサーバに転送してメールしたい場合の設定
・sendmailの場合
@MTAの設定
ローカルからのメール転送を受け付ける設定をする
sendmail.cfをコンパイルする為に必要なrpmの導入
1 2 3 |
# yum install sendmail-cf |
設定の修正
1 2 3 4 5 6 7 |
# cd /etc/mail # cp -p sendmail.mc{,.`date +%Y%m%d`} # vi sendmail.mc dnl DAEMON_OPTIONS(`Port=smtp,Addr=10.0.0.251, Name=MTA')dnl LOCAL_DOMAIN(`mydmainname.com')dnl |
※全方位から許可してRELAYを制限しています()
1 2 3 4 5 6 7 8 |
<br /># cp -p access{,.`date +%Y%m%d`} # vi access Connect:localhost.localdomain RELAY Connect:localhost RELAY Connect:127.0.0.1 RELAY Connect:10.0.0 RELAY |
設定の更新
1 2 3 4 |
# makemap -v hash /etc/mail/access.db < /etc/mail/access # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf |
sendmail再起動
1 2 3 |
# /etc/init.d/sendmail restart |
@メールクライアントの設定
バックアップ
1 2 3 4 |
# cp -p /etc/mail/submit.cf{,.org} ; ls -al /etc/mail/submit.cf* # cp -p /etc/mail/local-host-names{,.org}; ls -al /etc/mail/local-host-names* |
設定変更
1 2 3 4 5 6 |
# DJ_HOSTNAME=fromのドメインになるクライアントのホスト名を指定 # sed -i 's/^#Dj\$w.Foo.COM$/\0\nDj'${DJ_HOSTNAME}'/' /etc/mail/submit.cf # echo ${DJ_HOSTNAME} >> /etc/mail/local-host-names # sed -i "s/D{MTAHost}\[127\.0\.0\.1\]/D{MTAHost}[10.0.0.251]/g" /etc/mail/submit.cf |
※MTAHostにメールMTAアドレスを指定
※Dj設定しない場合は/etc/hostsの127.0.0.1の行の3カラム目にlocalhostの代わりに書いたドメインがfromになります。
比較確認
1 2 3 4 |
# diff /etc/mail/submit.cf{,.org} # diff /etc/mail/local-host-names{,.org} |
最後にmailコマンドで送信確認をします
1 2 3 |
# mail -s title-testmail hoge@gmail.com |
DKIMとかSPFレコードとか必要なら別途設定のこと。
・postfixの場合
@メールサーバ側の設定
1 2 3 4 5 6 7 |
# vi /etc/postfix/main.cf --- mynetworks = 54.249.xxx.xxx/32, 10.122.4.56/32, 10.121.18.78/32 54.249.xxx.xxx/32 --- # service postfix reload |
※ローカルから許可(上記はVPCでないAWS環境なので/32指定しているがVPCなら/24等でOK)
※ほかの設定は適宜済んでる前提
@メールクライアントの設定
1 2 3 4 5 6 7 8 |
# vi /etc/postfix/main.cf --- myhostname = [クライアントホストのFQDN] relayhost = [MTAのFQDN] --- # service postfix reload |
・qmailの場合
tcp.smtpにRELAY許可するように書いてハッシュDB更新します。
1 2 3 4 5 6 7 |
# cp -p tcp.smtp{,.`date +%Y%m%d`} # vi tcp.smtp 10.0.0.:allow,RELAYCLIENT="" # tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp |
vpopmailも入ってるなら
1 2 3 |
# /home/vpopmail/bin/clearopensmtp |
DBの中身を確認する
1 2 3 |
# cdbdump < /home/vpopmail/etc/tcp.smtp.cdb > ./tcp.smtp.`date +%Y%m%d`.txt |
※クライアント側はsendmailかpostfixの場合を確認のこと
※PATHは適宜ご確認ください
NATインスタンスないとすこし設定が複雑になりそうですね。シンプルなほうがよければNATがいいと思います。
ただ、管理サーバはあるけどIFが複数だったりNATインスタンス代がもったいない場合にアプリいれれば解決します。