저는 뒤쪽 세그먼트에 있는 호스트(예: VPC에 EIP가 없는 호스트나, DB나 NAS처럼 뒤쪽에서 냄새를 맡고 싶은 호스트)에 해상도, 이메일, yum, wget, 시간 동기화 등의 이름을 명명하고 싶습니다! 이 경우 설정을 요약하고 싶습니다.
현재로서는 두 가지 패턴이 있습니다. 하나는 NAT 패턴(AWS의 경우 NAT 인스턴스 사용)이고, 다른 하나는 전 세계적으로 통신할 수 있는 관리 서버에 소프트웨어를 배치하는 패턴입니다.
★NAT(AWS에서 NAT 인스턴스를 사용함) 패턴
데이터베이스 측에 인터넷 게이트웨이가 없고 공개가 아닌 로컬로 라우팅한다면, 이름 해석을 포함해 외부로 나갈 수 없습니다. (※) 여러 NIC가 있는 웹을 NAT로 변환하려고 했을 때, 다중 인터페이스 인스턴스를 NAT 종료 경로로 사용할 수 없는 것 같았습니다. 최근에 만든 새 계정은 VPC 전용이며, 글로벌 IP가 점점 더 임의적으로 조작되고 있는 것 같습니다. (EIP를 첨부해야 한다는 명세)
다음 URL에서 NAT 인스턴스를 만드는 방법: Amazon VPC 교육 - NAT 인스턴스 생성 방법 VPC 세부 정보 - 거의 주간 AWS Meister 시리즈 7부 - Amazon VPC에서 NAT를 이용해 공용 및 개인 서브넷을 분리하는 방법
상단 슬라이드에 보이는 대로 NAT 인스턴스를 생성할 수 있습니다. 대략적으로 말하면, VPC 서브넷을 생성하고, "ami-vpc-nat" AMI로 NAT 인스턴스를 만들고, NAT 인스턴스의 "출처 변경/DestCheck"를 비활성화하고, EIP를 NAT 인스턴스와 연관시키고, NAT 인스턴스의 ID를 PublicSubnet의 RouterTable에 추가한 후 필요에 따라 NAT 인스턴스의 SecurityGroup을 설정하세요
또한, 일반적인 라우터화 설정 방법처럼 인스턴스 생성 후 iptables에서 NAT 규칙을 설정하는 것이 필요해 보입니다.
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE
Service iptables save
iptables --list -t nat
위 슬라이드에서 보듯이, NAT 인스턴스를 기본 게이트웨이로 설정하는 라우팅 설정도 필요합니다.
# vi /etc/sysctl.conf
----------------------------------------------------
net.ipv4.ip_forward = 0
↓
net.ipv4.ip_forward = 1
----------------------------------------------------
# Syctl -p
라우터화 구성 방법(NAT) NAT 테이블을 이용한 리눅스 라우터 생성
NAT 변환 후에는 클라이언트 측에서 기본 게이트웨이를 NAT 서버로 지정하세요
새로운 기본 게이트웨이 추가
# /sbin/route add default gw 10.0.0.251 dev eth0
# 넷스타트 -rn
기존 기본 게이트웨이를 제거하세요
# /sbin/route del default GW 10.0.0.2 Dev eth0
# 넷스타트 -rn
확인해
# 핑 yahoo.co.jp
★ 전 세계적으로 통신할 수 있는 소프트웨어를 관리 서버에 삽입하여 문제를 해결하는 패턴
우선 이름 해상도부터 시작하겠습니다. 이건 바인드를 사용할 때 말이에요.
・내부 DNS 참조 구축하기: 내부 DNS 서버 구축
@DNS 서버 측
# 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
Bay-devel.x86_64 install bind.x86_64
설치:
bind.x86_64 30:9.3.6-20.P1.el5_8.6
바인드-devel.x86_64 30:9.3.6-20.P1.el5_8.6
부착된 의존성:
Bind-libs.i386 30:9.3.6-20.P1.el5_8.6
의존성 업데이트:
바인드-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
---------------
옵션 {
존 파일 저장 위치
디렉토리 "/var/named";
BIND 사용 범위를 명시하세요
allow-query {
Own (로컬 호스트)
127.0.0.1;
10.0.0.* ( 서브넷 255.255.255.0 )
10.0.0.0/24;
};
슬레이브 DNS의 주소를 설명하세요. 내부 DNS에는 필수는 아니지만, 당분간은 설명해 주세요.
허용-전송 {
Own (로컬 호스트)
127.0.0.1;
10.0.0.* ( 서브넷 255.255.255.0 )
10.0.0.0/24;
};
직접 이름을 확인할 수 없다면, 먼저 제공업체의 DNS에 가서 요청하세요.
이로 인해 LAN에서 이름 해석 성능이 향상되는 것으로 보입니다. 2003/07/29 추가
포워더스 {
211.132.xxx.xxx; ISAO 주요 DNS IP 주소
211.132.xxx.xxx; ISAO 보조 DNS IP 주소
};
};
루트 DNS 정보
존 "." {
루트 DNS 정보임을 표시하세요
유형 힌트;
파일 이름
파일 "named.ca";
};
localhost 포워드 드로우 설정
존 "localhost" {
마스터 DNS 서버임을 표시하세요
타입 마스터;
파일 이름
파일 "localhost.zone";
};
역방향 LocalHost 조회 설정
zone "0.0.127.in-addr.arpa" {
명확히 마스터 DNS 서버임을 명확히 하세요
타입 마스터;
파일 이름
파일 "0.0.127.in-addr.arpa";
};
10.0.0.* 에 대한 역조회 설정
zone "0.0.10.in-addr.arpa" {
명확히 마스터 DNS 서버임을 명확히 하세요
타입 마스터;
파일 이름
파일 "빈 상태";
};
---------------
ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
CP Named.root /var/Named/Named.ca
vi /var/named/empty
-----------------------------------------------------------
; 빈 RFC1918 존에 대한 BIND 역방향 데이터 파일
;
; 이 파일은 편집하지 마세요 - 여러 구역에 사용됩니다.
; 대신 그 복사본을 복사하고, named.conf를 편집한 뒤 그 사본을 사용하세요.
;
$TTL 86400
@ IN SOA localhost root.localhost. (
1 ; 연속극
604800 ; 새로고침
86400 ; 재도전
2419200 ; 만료
86400 ) ; 네거티브 캐시 TTL
;
@ IN NS 로컬호스트.
-----------------------------------------------------------
vi /var/Named/localhost.zone
----
$TTL 86400
@ IN SOA @ 루트 (
1 ; 연속극
604800 ; 새로고침
86400 ; 재도전
2419200 ; 만료
86400 ) ; 네거티브 캐시 TTL
뉴사우스코 @
IN A 127.0.0.1
----
vi /var/named/0.0.127.in-addr.arpa
----
$TTL 86400
@ IN SOA localhost. root.localhost. (
1 ; 연속극
604800 ; 새로고침
86400 ; 재도전
2419200 ; 만료
86400 ) ; 네거티브 캐시 TTL
NS에서는 localhost입니다.
1 in PTR 로컬 호스트.
----
vi /etc/sysconfig/named
OPTIONS="-4"
/etc/init.d/named start
PS -ef|grep named
이름 4801 1 0 12:02 ? 00:00:00 /USR/SBIN/이름 -U 이름 -4
chkconfig 이름 있는 on
@DNS 클라이언트 측
vi /etc/resolv.conf
---
Nameserver 10.0.0.10
Nameserver 10.0.0.2
# 파 +아무 +답변 www.isao.net
www.isao.net. 1800년 218.42.137.171
# 파 +노올 +답변 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
*제가 결속하는 이유는 익숙해졌기 때문입니다. 언바운드가 더 쉬운 것 같습니다. 아래를 참고하세요. 저는 언바인드를 설치했습니다
이 방법만으로는 이름을 풀 수 있지만, Yum은 해결할 수 없습니다. Bind만으로는 이름만 해결할 수 있으니, NAS에서 squid와 ntpd를 추가해서 yum, wget, ntpdate를 실행할 수 있습니다.
·전방 프록시를 만들고 얌, 엱, 엥, 컬을 해.
*웹 서버 프론트엔드를 빠르게 하는 리버스 프록시가 아닙니다. 내부에서 콘텐츠를 캐시하고 다운로드 속도를 높이거나 조절하는 방법입니다.
@プロキシサーバ側
Yum install squid.x86_64 --enablerepo=epel
설치:
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 랜 허용
2795, 2797d2792
< header_access X-Forward-For는 모두 부인하세요
< header_access 모든 것을 부인하는
< header_access 캐시-제어가 모두 거부합니다
3012d3006
< visible_hostname xx-stg.isao.net
4284c4278
< forwarded_for
---
> # forwarded_for 계속해
서비스 오징어 시작
chkconfig squid on
Netstat -lnpt|grep squid
TCP 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 5010/(SQUID)
@クライアント側
vi /etc/yum.conf
--
프록시=http://10.0.0.10:3128/
--
얌 그룹 리스트
vi ~/.wgetrc
--
http_proxy=10.0.0.10:3128
--
vi ~/.curlrc
--
프록시=http://10.0.0.10:3128
--
*wget 등의 대리 명시를 지정했습니다. 참고로, git, gem, vagrant 등은 여기 적혀 있습니다.
저장소 설치를 위해 RPMforge EPEL ELRepo Remi 저장소 설치를 참조하세요
·서버 측 시간 동기화를 위해 NTPD 설정 @ntp
터치 /etc/ntp.drift
CP -p /etc/ntp.conf{,.org}
vi /etc/ntp.conf
---
서버 ntp.nict.jp
서버 ntp.jst.mfeed.ad.jp
드리프트파일 /etc/ntp.drift
---
서비스 NTPD 시작
chkconfig ntpd on
NTPQ -p
원격 refid ST T 폴 도달 지연 오프셋 지터
==============================================================================
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 클라이언트 측
ntpdate 10.0.0.10
# ntpdate -b 10.0.0.10
1월 24일 14:58:55 ntpdate[6730]: 스텝 타임 서버 10.0.0.10 오프셋 0.070994초
# 크론탭 -에
# 크론탭 -l
0 * * * * * /usr/sbin/ntpdate -bs 10.0.0.10 > /dev/null 2>&1
클라우드의 경우, 시간이 쉽게 이동될 수 있고, 시간이 어긋나면 로그와 DB 시간 열의 시간이 이동할 수 있고, 애플리케이션에 심각한 영향을 미칠 수 있다고 들었습니다. 설정하는 것을 잊지 마세요.
★LAN 내부에서 MTA 서버로 이메일을 전달하고 싶을 때 설정
・sendmail의 경우, @MTA 설정: 로컬에서 이메일 전달을 허용하도록 설정, sendmail.cf 컴파일에 필요한 rpm을 소개합니다
# sendmail-cf 설치 좋았어
설정 변경
# CD /etc/메일
# cp -p sendmail.mc{,.'date +%Y%m%d'}
# 비 sendmail.mc
dnl DAEMON_OPTIONS('Port=smtp,Addr=10.0.0.251, Name=MTA')dnl
LOCAL_DOMAIN('mydmainname.com')DNL
*RELAY는 모든 방향에서 허가를 허용하여 제한됩니다 ()
# cp -p access{,.'date +%Y%m%d'}
# vi 접근
Connect:localhost.localdomain 릴레이
연결: localhost 릴레이
Connect:127.0.0.1 릴레이
Connect:10.0.0 릴레이
설정 업데이트
# makemap -v 해시 /etc/mail/access.db < /etc/mail/access
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Sendmail 재시작
# /etc/init.d/sendmail 재시작
@メールクライアントの設定 백업
# 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*
설정 변경
# 도메인이 될 클라이언트의 호스트명을 지정하세요 DJ_HOSTNAME=from
# sed -i 's/^#Dj\$w.Foo.COM$/\0\nDj'${DJ_HOSTNAME}'/' /etc/mail/submit.cf
# 에코 ${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 대신 쓰인 도메인이 출처가 됩니다.
비교하고 확인하세요
# diff /etc/mail/submit.cf{,.org}
# diff /etc/mail/local-host-names{,.org}
마지막으로, 메일 명령어로 전송을 확인하세요
# 메일 -s 제목-테스트 메일 hoge@gmail.com
DKIM이나 SPF 기록이 필요하면 따로 설정하세요.
・postfix@메일 サーバ側の設定의 경우
# 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
---
# 서비스 포스트픽스 재장전
*로컬 허용 (위 내용은 VPC가 아닌 AWS 환경이므로 /32가 지정되지만, VPC라면 /24 등도 괜찮습니다) *다른 설정들은 이에 맞게 완료된 것으로 가정합니다.
@メールクライアントの設定
# vi /etc/postfix/main.cf
---
myhostname = [클라이언트 호스트의 FQDN]
중계기 호스트 = [MTA의 FQDN]
---
# 서비스 포스트픽스 재장전
・qmail의 경우, tcp.smtp에 쓰면 RELAY가 허용되고 해시 DB를 업데이트합니다.
# 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도 포함되어 있다면
# /home/vpopmail/bin/clearopensmtp
DB의 내용을 확인해 보세요
# cdbdump < /home/vpopmail/etc/tcp.smtp.cdb > ./tcp.smtp.'date +%Y%m%d'.txt
*클라이언트 측에서 sendmail인지 postfix인지 확인해야 합니다 *적절한 경우 PATH를 확인해 주세요
NAT 인스턴스가 없다면 설정이 조금 복잡할 수 있습니다. 간단하게 하고 싶다면 NAT가 더 낫다고 생각합니다. 하지만 관리 서버가 있는데 IF가 여러 개 있거나 NAT 인스턴스 비용이 낭비라면 앱을 추가하면 문제를 해결할 수 있습니다.