Unix/Ubuntu

IP공유 서버 만들기

ForceCore 2007. 9. 10. 04:59
IP가 부족해졌다.
보통 해결책은: 그냥 공유기 하나 사시오 ㅡ,.ㅡ;;
하지만 학교환경은 다르다?
1. 물건을 사자니 귀찮고 (서류를 내야 하니까)
2. 컴퓨터는 썩어나고, 랜카드도 남아돈다.

Windows 2003을 쓰면 쉽지만 학교에서는 합법적으로 서버를 운영해야 하므로...
(돈 주고 사는건 역시 낭비고)
운영체제는 가볍게 Ubuntu 7.04를 선택.

WRT-54g IP공유기 설명서를 보면
Router
NAT
Network Switch
이 세개가 합쳐진 것이 이 공유기라고 적혀있다 ㅡ,.ㅡ
그래서 다음과 같은 준비물이 필요함을 알 수 있다:

준비물:
Network Switch: 있다. 단순히 랜선 구멍을 여러 컴퓨터에서 쓸 수 있도록 확장해주는 용도로 그동안 쓰던 것.
NAT: 컴퓨터로 쓸거다.
Router: 컴퓨터로 할거다.
랜카드: 보통의 PC에는 랜카드가 두 개 있지 않으므로 필요하다.
PC: 썩어나는 PC 한 대. 좀 구형이라도 좋지만 단 네트워크 환경은 좋을수록 좋다.

보통 PC처럼 설정한뒤, 한 NIC에는 인터넷선을 연결, 다른 것에는 Switch를 연결하였다.

이 글이 컨닝한 문서:
http://www.howtoforge.com/ubuntu6.10_firewall_gateway

일단은 로그인하고
vim설치하고, ssh서버 설치하고, 패키지들 업데이트 하는 일상적인 수순을 밟는다.

설치할 때 고정IP설정을 준 네트워크 카드는 잘 잡혀있다.
이는 뭐 그대로 두면 되고...
다른 랜카드에는 공유기처럼 쓰기 위한 설정을 입력해야 한다.
/etc/network/interfaces파일을 수정하라:

| # This file describes the network interfaces available on your system
| # and how to activate them. For more information, see interfaces(5).
|
| # The loopback network interface
| auto lo
| iface lo inet loopback
|
| # for IP-sharing
| auto eth0
| iface eth0 inet static
|         address         192.168.1.1
|         netmask         255.255.255.0
|         broadcast       192.168.1.255
|         network         192.168.1.0
|
| # The primary network interface
| auto eth1
| iface eth1 inet static
| ### eth1은 외부 네트워크에 연결하기 위한 interface. 자세한 설정은 안 보여주겠다;;; 설치때 자동생성되어있을 것임.

# /etc/init.d/networking restart
명령으로 네트워크를 재시작.
ifconfig로 네트워크카드들 상태를 체크해보면 새로 eth0 (혹은 뭐든)이 보일 것이다.

# apt-get install libmd5-perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl shorewall dnsmasq
shorewall ,dnsmasq, 여러가지 펄 모듈 설치.

shorewall: shore line wall. Netfilter를 작성하기 위한 하이레벨 툴임.
dnsmasq는 DNS forwarder 이자 DHCP server임.

일단,
/etc/dnsmasq.conf수정.
dhcp-range는 필히 수정할 것!
http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2007q1/001291.html
를 컨닝하면 /etc/dnsmasq.conf의 필수적인 부분을 볼 수 있다.
>/etc/dnsmasq
>domain-needed
>bogus-priv
>filterwin2k
>strict-order
>local=/slestak.homelinux.org/
>domain=slestak.homelinux.org
>dhcp-range=192.168.0.50,192.168.0.80,12h
>dhcp-host=00:04:00:b9:xx:xx,cheryl-printer,192.168.0.2,infinite
>dhcp-host=00:0d:9d:5f:xx:xx,cheryl-work-laptop,192.168.0.3,infinite
>dhcp-host=00:11:d9:02:xx:xx,tivo-steve,192.168.0.4,infinite
>dhcp-host=00:11:d9:01:xx:xx,tivo-livingroom,192.168.0.5,infinite
>dhcp-host=00:13:20:84:xx:xx,shoebox,192.168.0.6,infinite
>dhcp-host=00:16:01:41:xx:xx,linkstation,192.168.0.9,infinite
>dhcp-host=00:04:00:79:xx:xx,steve-printer,192.168.0.11,infinite
>dhcp-option=3,192.168.0.1
>dhcp-option=19,0 # option ip-forwarding off
>dhcp-option=44,0.0.0.0 # set netbios-over-TCP/IP nameserver(s) aka WINS
>server(s)
>dhcp-option=45,0.0.0.0 # netbios datagram distribution server
>dhcp-option=46,8 # netbios node type
>dhcp-option=47 # empty netbios scope.
>log-queries

대충 저런 식임. mac과 줄 IP를 연관시킬수도 있다.

DHCP로 IP를 주는것은 성공.
하지만 그런다고 인터넷이 되는 것은 아니다.

서버가 라우터가 아직 아니니까.
(분리된 네트워크를 연결해주는거라나 뭐라나. 각자 사전 찾아보시오.)

라우터 역할을 shorewall이 하게 되는데...
http://www.shorewall.net/two-interface.htm#id2496032
결국은 shorewall에 달렸다!!
shorewall을 두개의 NIC에 맞게 설정하자.

# cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall/
# cd /etc/shorewall
# gunzip interfaces.gz masq.gz rules.gz policy.gz

/etc/shorewall/shorewall.conf를 수정:
IP_FORWARDING=Keep이라고 되어있는데 On으로 고친다.
/etc/default/shorewall파일을 수정해서, startup=0으로 된 것을 1로 고친다.

/etc/sorewall/policy를 수정.
달라진 것은:
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
loc net ACCEPT
net all DROP info
all all REJECT info
$FW net ACCEPT
이 네 항목만 있으면 일단은 OK.

masq파일 수정.
첫번째 칼럼에는 외부용 NIC, 두번째에는 내부용 NIC. 세 번째 칼럼은 붙여도 되고
안 붙여도 되는데, 공유기(?)가 static IP라면 IP를 적어도 된다. 그러면 조금 더
라우팅이 효율적이 된다고 함.

이제 shorewall을 시작시켜본다.
# /etc/init.d/shorewall start

shorewall이 DHCP 트래픽을 막아서 아직은 다시 DHCP서버는 동작하지 않지만, 수작업으로,
다른 컴퓨터에 192.168.1.150과 같은 IP를 입력하면 인터넷이 되기는 할 것이다.

이제 shorewall을 수정해서 DHCP신호를 받도록 해야 한다...
interfaces에서 하는 것임.
내부네트워크용 eth에다가 dhcp라는 옵션을 붙이라.

이제 DHCP로 IP주기도 되고, 내부네트워크의 컴퓨터가 인터넷을 하는 것도 된다. 단, IP로 쳐서
들어가면 되는데 www.naver.com처럼 주소로 쳐서 들어가는 것이 안 된다. 그런 경우에는,
/etc/dnsmasq.conf를 수정하여...
dhcp-option=6,111.111.111.111 (111.111....자리에다가 적당한 DNS서버의 IP주소를 넣는다.)

---------------------------------------------------------
하지만 방화벽이 이제 문제.
1. 192.168.1.1에 해당하는 서버에 SSH로 접속하고 싶다.
2. 192.168.1.100 (클라이언트)에 SSH로 접속하고 싶다.
이런 상황을 해결해보자.

일단은 샘플로 주어진 rules.gz를 압축해제한다.
net: 외부 네트워크
loc: 내부 네트워크
$FW: 방화벽/라우터로 쓰고 있는 바로, 지금 설정하고 있는 PC.

1번의 경우:
rules에 한 줄 추가:
SSH/ACCEPT net $FW
두둥...!
22번포트만 된다 ㅡ,.ㅡ;;;
9922번포트로도 되게 하려면?
DNAT net $FW:192.168.1.1:22 tcp 9922
줄을 추가한다.

2번의 경우:
1번의 경우에서 9922번포트가 되게 하는 것과 비슷하다.
rules에 한 줄 추가:
DNAT net loc:192.168.1.108:3389 tcp 3389