|
[설명]
*. 아래에서 sun 은 우체국 라이브라 VPN 인터페이스명이고 moon 은 직원집 라이브라 VPN 인터페이스명이다.
우체국 라이브라 네트워크 설정
- ①(LOCAL) : 우정망에 접속된 PC(10.0.0.0/8)들이 연결된 허브에 연결하였다. IP는 10.x.32.5
- ③(Primary) :
우정망 라우터와 연결하였다.IP는 ① 번과 같다.
- ②번(Secondary) :
우체국 민원실에 연결된 T-1 인터넷 전용선에 연결하였다. 이 T-1 전용선은 우체국을
방문한 일반인들이 인터넷을 사용하도록 민원실의 피시에만 연결돼어 있다.
이 라인은 VPN 연결과는 무관하다. 물론 이 라인을 VPN 연결에 사용해도 된다. 당초에는
우체국 내의 직원들이 우정망과 인터넷을 동시에 사용할 수 있도록 이 라인을
라이브라에 연결하였다. 그러나 다른 문제로 이 라인은 연결을 끊었다.
(상부에서 감사를 나오면 문제가 된다나요... 글쎄 첨단을 달리는 우체국 직원들 피시에서 인터넷을 쓸수 없다는게 말이 되는지..)
- ④(Tertiary) :
ADSL-MyIP 를 연결하였다. IP=210.W.253.211. 이 라인이 VPN 연결에 사용된다.
- default gateway = 10.x.32.31
아래는 터널 설정 과정이다.
- policy routing
- ip ru add from 210.w.253.211 table 6 prio 160
- ip ro add table 6 default via 210.w.253.254 dev eth3
- route add -host 61.y.52.251 dev eth3
설명]
우체국 라이브라의 디폴트게이트웨이는 우정망 라우터의 주소인 10.x.32.31이다. 우정망은 사설 IP인 10.0.0.0/8 을
사용하고있고 인터넷과는 연결이 되어 있지 않다. 우체국 직원들 PC도 모두 10. 대 IP를 사용한다.
그래서 moon 으로부터 VPN 연결 트래픽 응답 패킷을 ADSL MyIP 라인으로 보내려면
1. 과 2. 명령으로 policy routing 으로 ADSL 라인의 게이트웨이를 지정해야 한다.(rp_filter 을 0으로 해야 한다.) 만약 이 부분이 없다면 moon 으로부터 들어온 VPN 연결 요청에
대한 응답이 10.x.32.31 로 간다.
3. 은 우체국 라이브라에서 직원집 라이브라를 연결할 때 eth3에 연결된 ADSL 라인으로 라우팅 되게 한다. 이 부분은 VPN 과는 관련은 없지만 이 부분이 없으면 우체국 라이브라에서 직원집 라이브라로 telnet 61.y.52.251 명령이 안된다.
확인]
ip ru sh(일부)
60: from all fwmark 6 lookup 6
160: from 210.w.253.211 lookup 6
ip ro sh table 6
default via 210.w.253.254 dev eth3
*. ip ru 의 "60: from ..." 은 VPN 과는 무관하다. 이는 우체국 내의 PC에서 인터넷을 사용하기 위해 필요하다. 즉 "ip ru add fwmark 6 table 6 prio 60" 명령을 필요로 한다. 그리고서 "iptables -t mangle -A PREROUTING -i eth0 -s $IP_PC -d ! 10.0.0.0/8 -j MARK --set-mark 6" 명령을 주면 $IP_PC(PC의 IP 주소) IP를 사용하는 PC는
ADSL 을 통해 인터넷을 사용할 수 있다. 물론 우정업무도 동시에 사용 가능하다.(아래 설명)
- 터널 인터페이스 주소 및 라우팅
- ip tunnel add sun mode gre local 210.w.253.211
remote 61.y.52.251 ttl 255
- ip link set sun up
- ip link set sun mtu 1500
- ip addr add 10.x.32.5/32 dev sun
- ip ro add 10.x.32.40 dev sun
- arp -s 10.x.32.40 -D eth1 pub
설명]
확인]
- ip add sh(일부)
sun@NONE: mtu 1500 qdisc noqueue
link/gre 210.w.253.211 peer 61.y.52.251
inet 10.x.32.5/32 scope global sun
- arp -an
? (10.x.32.40) at * PERM PUP on eth1
- netstat -nr
Destination Gateway Genmask Flags Iface
10.xxx.32.40 0.0.0.0 255.255.255.255 UH sun
61.xxx.52.251 0.0.0.0 255.255.255.255 UH eth3
10.xxx.32.31 0.0.0.0 255.255.255.255 UH eth1
210.xxx.253.192 0.0.0.0 255.255.255.192 U eth3
10.xxx.32.0 0.0.0.0 255.255.255.0 U eth0
127.0.0.0 0.0.0.0 255.0.0.0 U lo
0.0.0.0 10.xxx.32.31 0.0.0.0 UG eth1
(일부 생략)
- 기 타(NAT)
/sbin/iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to 210.w.253.211
iptables -t nat -vnL
SNAT all -- * eth3 0.0.0.0/0 0.0.0.0/0 to:210.w.253.211
*. 우체국 내부 PC에서 인터넷을 사용하기 위해 필요하다.
[작동 과정]
직원이 집 PC에서(10.x.32.41) 서울에 있는 우정망 서버(10.x.y.z)를 연결하면 우정망 서버가 보낸 데이타는 우체국 우정망 라우터(10.x.32.31)로 온다. 우정망 라우터는 10.x.32.40 을 찾는 arp 요청 패킷을 eth1 에 연결된 모든 호스트에 브로드캐스트한다.
[주의]
우정망 서버에서 오는 응답 패킷의 목적지 주소는 10.x.32.41 가 아니고 10.x.32.40 이다. 터널 클라이언트 moon의 주소가 10.x.32.40 이고 10.x.32.41 에서 나오는 데이타는 실제는 10.x.32.40 로 NAT가 걸린다.
그러면 라이브라의 ③(Primary) 랜카드(eth1)는 그 요청에 응답하고 데이타를 가져온다.(proxy arp) 10.x.32.40 로 가는 데이타가 라이브라에 들어오면 그 다음에는 라우팅 테이블에 따라 VPN 인터페이스인 sun 으로 데이타가 보내진다.(10.xxx.32.40 0.0.0.0 255.255.255.255 UH sun) 즉 arp -s 명령이 중요한 역할을 한다. 데이타가 sun으로 보내 진 후에
직원 집의 라이브라로 가는 과정은 gre 터널의 몫이다.
서울의 우정망 서버에서 볼때 10.x.32.40 IP 주소를 갖는 피시
(실제 IP는 10.x.32.41)는 우체국 내에
있는 것으로 보인다. 실제 사용에서도 아무런 차이가 없다. 단지 우체국 내의
피시와 파일 공유 및 프린터 공유만 할 수 없다. 그러나 이것도
VPN 구성을 변경하면 가능하다.
[참고]
10.x.y.z IP를 사용하는 우체국 PC에서 ADSL을 통해 인터넷을 사용하려면
라이브라에 아래 명령이 추가되야 한다. 우체국의 일부 피시는 아래
방법으로 우정망과 인터넷을 동시에 사용하고 있다.(대외비임. 보안 감사가 나오면 문제가
된다나요. 그래서 감사가 나오면 라이브라를 제거하고 라우터를 허브에 직결한답니다.)
- iptables -t mangle -A PREROUTING -i eth0 -s 국장님_PC_IP -d ! 10.0.0.0/8 -j MARK --set-mark 6
- iptables -t mangle -vnL
175K 18M MARK all -- eth0 * 10.xxx.32.55 !10.0.0.0/8
MARK set 0x6
조금 더 골치 아픈 문제
iptables 의 mangle table 에 아래 라인이 들어 있다.
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
MARK all -- 0.0.0.0/0 !10.0.0.0/8 MARK set 0x6
이 부분이 없다면 리눅스랩에서 우체국 라이브라의 ADSL IP 주소로
telnet 을 할 수 없다. 왜?
끝까지 읽으면 답이 있슴.
|
집 라이브라 설정
- ①②(LOCAL) : 192.168.1.1/24(eth0), 와 10.x.32.8/32(eth0:1) 두 개의 주소를 갖는다. 왜 두개가 필요한지는 아래에 나온다.
- (Primary) : 케이블 모뎀을 연결했다. IP는 61.y.52.251
- default gateway = 61.y.52.1
libra:/etc/rc.boot# ip add sh
3: eth0: mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:10:0b:01:0c:5d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
inet 10.245.32.8/32 brd 10.255.255.255 scope global eth0:1
4: eth1: mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:90:0b:01:0c:5e brd ff:ff:ff:ff:ff:ff
inet 222.102.39.222/24 brd 222.102.39.255 scope global eth1
터널 설정 과정
- routing table 및 policy routing
- ip ru add fwmark 4 table 4 prio 40
- ip ru add from 61.y.52.251 table 2 prio 120
- ip ro add table 2 default via 61.y.52.1 dev eth1
- ip ro add 10.x.32.41 dev eth0
설명]
2. 3. 는 sun과 같다.(여기서는 default gateway가 61.y.52.1 이므로 이 둘은
필수는 아니다. 단지 정확성을 위해서다) 1. 은 아래에 설명이 나온다.
그런데 왜 4. 가 필요한가? 위에서 eth0:1 에 왜 10.x.32.8/32 주소를 하나 더 부여했는가?
이 두가지는 터널과는 무관한 사유로 추가되었다. 우정업무는 클라이언트/서버 방식으로 설계되어서 피시에 클라이언트 프로그램을 설치해야 한다. 그런데 개발업체가
이 프로그램을 함부로 아무 피시에서나 설치하지 못하게
프로그램을 사용하는 피시의 IP 주소가 10.0.0.0/8 인 경우만 실행되게 설계하였다.
(원시적인 방법이지만)
그래서 직원 집의 터널 IP 주소를 10.x.32.40 으로
부여하고 라이브라의 local 주소를 192.168.1.1, 직원 PC 주소를 192.168.1.2로
부여해서 10.x으로 가는 데이타를 10.x.32.40로 NAT를 걸어 주었으나 클라이언트
프로그램이 일부가 실행이 안되었다. 그래서 직원의 PC의 IP 주소를 10.x.32.41로
부여하기 위해 이 두가지가 필요하다.
- 터널 생성
- ip tunnel add moon mode gre local 61.y.52.251 remote 210.w.253.211 ttl 255
- ip link set moon up
- ip link set moon mtu 1500
- ip addr add 10.x.32.40/32 dev moon
- ip ro add table 4 default via 10.x.32.5 dev moon onlink
설명]
1. ~ 4. 은 sun 과 같다. 5. 는 왜 필요한가?
라이브라의 default gateway가 61.y.52.1(케이블모뎀 회사의 라우터)이므로
직원 피시(10.x.32.41)에서 우정망 서버(10.x.y.z : 서울에 있음)를 연결하면
그 데이타는 터널(10.x.32.40)로 들어가지 않고 케이블 모뎀의 라우터로 들어간다.
그래서 목적지가 10.0.0.0/8 인 데이타를 터널로 유도하기 위해 필요하다.
방법은 간단하다. 직원 피시에서 라이브라의 로칼포트(eth0)로 들어오는
데이타 중 목적지 주소가 10.x.y.z 인 데이타에 대해서만 빨간색으로 표시를한다.
(fwmark 4) 그러면 라우팅을 담당하는 교통 순경이 빨간색이 칠해진 데이타만
터널 쪽으로 보낸다.
즉 직원 PC(10.x.32.41)에서 우정망 서버를 연결하기 위해서는 아래 둘이 더 필요하다.(머리가 빙빙 돌죠?)
- iptables -t mangle -A PREROUTING -i eth0 -d 10.0.0.0/8 -j MARK --set-mark 4
- iptables -t nat -A POSTROUTING -o moon -j SNAT --to 10.x.32.40
1. 은 일반인들이 거의 쓰지 않는 명령이지만 위의
"ip rule add fwmark 4 ..." 및 " ip ro add table 4 default via ..." 과
관련되어 목적지가 10.0.0.0/8 인 데이타를 터널(moon)로 보낸다.
2. 는 설명이 필요 없겠죠. 우체국에서는 10.x.32.40 주소만 터널로 보내므로 직원 집에서 우정망으로 가는 모든 데이타는 이 주소만 사용해야 한다. 터널에도 NAT를 거는건 첨 봤다구요? 윈도에서도 터널에 NAT가 걸려요...(인터넷 공유요.)
그럼 직원 PC(10.x.32.41)에서는 인터넷은 사용할 수 없나요? 리눅스랩 홈페이지(211.217.x.y)를 연결하는 경우도 데이타가 터널(moon)로 가나요?
직원 피시에서 목적지가 인터넷 주소인 데이타가 터널로 들어간다면 인터넷 연결이 되지 않겠죠.(우정망에는 인터넷 게이트웨이가 없죠. 라이브라 빼고는)
목적지가 10.0.0.0/8 이 아닌 데이타는 default gateway 인 61.y.52.251 로 보내지죠.
(우정망 재택근무용인 10.x.32.41 피시에서 인터넷을 사용해도 마찬가지다.)
그래서 아래 NAT 만 추가하면 당연히 인터넷도 연결이 돼겠죠. 인터넷을 사용하는
경우는 데이타가 우체국에 설치된 라이브라-500을 경유하지 않고 케이블모뎀으로
바로 나간다. 즉 VPN을 연결하지 않은것과 똑 같다.
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 61.y.52.251
(-s 192.168.1.0/24 을 넣으면 안된다. 이 옵션을 넣으면 10.x.32.41 피시는
우정망만 사용할 수 있고 인터넷은 사용하지 못한다.)
- ip ru sh
40: from all fwmark 4 lookup 4
120: from 61.y.52.251 lookup 2
- ip ro sh table 4
default via 10.x.32.5 dev moon onlink
- ip add sh
moon@NONE: mtu 1500 qdisc noqueue
link/gre 61.y.52.251 peer 210.w.253.211
inet 10.x.32.40/32 scope global moon
- netstat -nr
10.x.32.41 0.0.0.0 255.255.255.255 UH eth0
61.y.52.1 0.0.0.0 255.255.255.255 UH eth1
192.168.1.0 0.0.0.0 255.255.255.0 U eth0
127.0.0.0 0.0.0.0 255.0.0.0 U lo
0.0.0.0 61.y.52.1 0.0.0.0 UG eth1
- iptables -t nat -vnL
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
SNAT all -- * moon 0.0.0.0/0 0.0.0.0/0 to:10.x.32.40
SNAT all -- * eth1 0.0.0.0/0 0.0.0.0/0 to:61.y.52.251
- iptables -t mangle -vnL
Chain PREROUTING (policy ACCEPT 10M packets, 3383M bytes)
MARK all -- eth0 * 0.0.0.0/0 10.0.0.0/8 MARK set 0x4
[주]
iptables 에서 mangle 을 사용하려면 커널을 컴파일해야 한다.
[참고]
직원 집의 라이브라 NAT 테이블에는 아래 두 개가 더 추가되었다. 이 부분은
터널과는 무관하다.
- iptables -t nat -A PREROUTING -i eth1 -d 61.y.52.251 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
- iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.2 -j SNAT --to 192.168.1.1
인터넷에서 http://61.y.52.251 명령을 주면 직원 집의 192.168.1.2 웹서버가
응답을 하겠죠? 그런데 2번은 왜 필요하죠? 2 번은 쓸모가 없다고요?
우정망 연결 PC의 IP는 10.x.32.41 인데 이 PC에서 192.168.1.2 웹서버를
연결할 수 있을 까요?
당연 안되죠. 그런데 2번이 이를 가능하게 합니다. 10.x 피시에서 192.168.1.2 를
연결할 때 라이브라의 로칼 주소인 192.168.1.1 로 NAT를 걸어 줍니다.
(첫번 설명에서 이 부분 설명이 틀렸읍니다.)
여기까지 전부 읽고 이해한 독자에게 서비스로 하나 더
라이브라를 라우터로 사용할 때 디폴트 게이트웨이가 아닌 인터페이스로 데이타를 내 보내는 방법입니다.
- 데이타가 라이브라를 거쳐 갈때 : fwmark 와 ip ru add fwmark ... 를 사용
- 라이브라가 클라이언트 즉 라이브라에서 외부의 서버를 연결할 때 (ftp sunsite.org) : ip ro add
- 라이브라가 서버 즉 외부에서 라이브라의 서버를 접근 할 때
(라이브라에 웹서버가 설치되어 있다면): ip ru add from 또는
iptables -t mangle -A OUTPUT 에서 fwmark 사용
주의 : 라이브라에 인터넷 라인이 둘 이상일 때만 해당된다. 한 개라면 차이가 없다.
|