[Linux] KVM의 Bridge mode network 사용 시 네트워크 사용 불가 문제

KVM 사용 시 Bridge mode로 GuestOS에 네트워크 셋팅을 해도 동작을 안하는 경우가 있다. 게이트웨이나 DNS로 ping조차 안가는데, docker 와 함께 사용 시 문제가 발생한다.

docker가 iptables 의 FORWARD chain의 정책을 DROP으로 해버리기 때문이다.

oot@justiny-desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

다음처럼 해주면 잘된다.

# iptables -A FORWARD -i br0 -o br0 -j ACCEPT

iptables 설정

오랜만에 iptables 설정을 하려니 어떻게 했었는지 하나도 기억이 안나더군요.
기억나는건 iptables -L 하나…;;;
할 때만 기억했다가 또 까먹고 또 까먹고.. 이 놈의 돌대가리..;;
암튼 그래서 검색을 해보니 우분투의 community 도움말에 설정 관련 글(https://help.ubuntu.com/community/IptablesHowTo)이 있네요~
참 편리하게 잘 만들어놨네요^^

1. Establicshed 세션 허용
$ sudo iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

2. 특정 포트 허용
$ sudo iptables -A INPUT -p tcp –dport <포트 번호> -j ACCEPT
<포트 번호> 는 135:139 형식으로 범위를 조절할 수 있다.

3. 그 외 모두 막기
sudo iptables -A INPUT -j DROP

4. 현재 iptables 설정 파일로 저장하기
$ sudo sh -c “iptables-save > /etc/iptables.rules”

5. iptables 설정 파일로 부팅 시에 재설정하기
$ sudo vi /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
 pre-up iptables-restore < /etc/iptables.rules
 post-down iptables-save -c > /etc/iptables.rules

p.s : 본문의 etc/etc 로 해주셔야 합니다. > 나 < 이후에 / 가 붙지 않는 버그가 텍스트큐브에 있는 듯 합니다. -> 티스토리로 이전 후 수정되었습니다.

예제)
1. 특정 IP 대역만 허용

# iptables -A INPUT -p all -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -j DROP