# 참고로 다음과 같이 각 명령에 대한 도움말을 볼 수 있다.
ip addr help
ip link help
# 네트워크 장치�ipv4, ipv6 주소 정보
ip addr
# ip 주소할당, dev(device)로 eth0 를 사용
ip addr add 10.10.10.2/24 dev eth0
# ip 주소 삭제
ip addr add 10.10.10.10/24 dev eth0
ip addr delete 10.10.10.10/24 dev eth0
# 장치별 링크 정보
ip link
# 라우터 정보
ip route
# 연결된 이웃 장치 정보
ip neighbor
##### 네트워크 네임스페이스 구분해서 통신하기 #####
# veth(virtual Ethernet devices) 타입으로
# lemon_eth0 apple_eth0 를 생성하고 연결한다.
ip link add lemon_eth0 type veth peer name apple_eth0
# namespace 확인
ip netns
# LEMON namespace(네트워크가 호스트 네트워크와 격리됨) 생성
# /var/run/netns/LEMON 파일이 생성된다.
ip netns add LEMON
ip netns add APPLE
# lemon_eth0 의 네임스페이스를 LEMON 으로 설정
ip link set lemon_eth0 netns LEMON
ip link set apple_eth0 netns APPLE
# LEMON 네임스페이스에 접속해서 lemon_eth0 장치 시작하기
ip netns exec LEMON ip link set lemon_eth0 up
ip netns exec APPLE ip link set apple_eth0 up
# LEMON 네임스페이스에 접속해서 lemon_eth0 장치에 ip 설정하기
ip netns exec LEMON ip addr add 10.10.10.2/24 dev lemon_eth0
ip netns exec APPLE ip addr add 10.10.10.3/24 dev apple_eth0
# APPLE apple_eth0 의 패킷을 모니터링 하고
ip netns exec APPLE tcpdump -l -i apple_eth0
# LEMON(lemon_eth0) --> APPLE(apple_eth0) 로 핑을 보내 확인 할 수 있다.
ip netns exec LEMON ping 10.10.10.3
# 참고로 매번 네임스페이스 exec 를 명시하지 않고,
# nsenter 명령으로 네임스페이스 들어가 있을 수 있다.
# 들어간 네임스페이스에 exit 를 하면 빠져나온다.
nsenter --net=/var/run/netns/LEMON
ping 10.10.10.3
# 통신시 ARP 로 매번 브로드캐스팅은 비효율적이라 캐싱하게 된다.
# LEMON 네임스페이스 상에서 이웃을 조회하면 10.10.10.3(apple_eth0)가 캐싱되있다.
ip neighbor
# 현재 네임스페이스를 빠져나온다.(호스트(루트) 네임스페이스로 이동)
exit
# 이제 LEMON, APPLE 네임스페이스 삭제하면 LEMON, BLUE 네임스페이스 안의 이더넷도 모두 삭제된다.
ip netns del LEMON
ip netns del APPLE
##### iptables(netfilter) 설정하기 #####
# iptables 은 커널의 netfilter(프레임워크)에 rules를 설정하고 실제로는 netfilter 로 방화벽 기능이 동작한다.
# netfilter 는 다음 5개의 chain 을 hook 하고 룰에 따라 패킷을 필터링한다.
# PREROUTING: 외부로부터 들어오는 패킷
# INPUT: PREROUTING -> 로컬에서 받아야 하는 패킷
# FORWARD: PREROUTING -> FORWARD -> POSTROUTING 으로 로컬을 거치지 않고 외부로 부터 들어온 패킷을 다른 외부로 가야하는 패킷
# OUTPUT: 로컬 -> POSTROUTING 으로 로컬에서 외부로 가는 패킷
# POSTROUTING: FORWARD 또는 로컬에서 외부로 나가야하는 패킷
# 각 chain 에 맞는 다음과 같은 성격의 룰 테이블이 있다.
# filter: 패킷 필터링에 사용하는 테이블, INTPUT,FORWARD,OUTPUT 에서 사용
# nat: 출발지, 목적지 변경시 사용하는 테이블, PREROUTING,POSTROUTING 에서 사용
# mangle: 패킷 변조시 사용하는 테이블�, 5개 chain 모두에서 사용
# raw: 주로 netfilter 에서 추적하지 않도록 NOTRACK 설정하는데 사용하는 테이블, PREROUTING,OUTPUT 에서 사용
# security: SELinux 보안 사용시 사용하는 테이블, INPUT,FORWARD,OUTPUT 에서 사용
# filter 테이블 -S(list-rules) 룰 리스트 보기
iptables -t filter -S
# -t 명시하지 않으면 filter 가 기본값이다.
iptables -S
# FOWARD chain에 설정된 rule들 보기 -v(가 없으면 in,out 이더넷 장치가 보인다)
iptables -L FORWARD -v
iptables -L INPUT -v
# 10.10.10.3 으로 부터 들어오는(INPUT chain) -j(--jump) DROP(패킷 차단) 룰 추가(-A, --append)
iptables -A INPUT -s 10.10.10.3/32 -j DROP
# 10.10.10.3 으로 부터 들어오는(INPUT chain) -j(--jump) ACCEPT(패킷 허용) 룰 추가(-A, --append)
iptables -A INPUT -s 10.10.10.3/32 -j ACCEPT
# 룰 삭제(-D, --delete)
iptables -D INPUT -s 10.10.10.3/32 -j ACCEPT
# -A 같은 내용의 룰이 계속 추가 되 때문에
# -D 같은 내용이라도 마지막 룰만 삭제되어 모두 삭제하려면 N번 실행해야 한다.
# 외부(인터넷) 통신을 위해서는
# POSTROUTING 에 nat 추가
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
# 패킷을 내 사설IP 에서 받을 수 있도록 -d(--destination) 허용
iptables -t filter -A FORWARD -d 10.10.10.3/24 -j ACCEPT
# nat 설정 상태 확인
iptables -t nat -S
comments:
댓글 쓰기