약간의 코딩을 할 준비가 되었다면 다음과 같이 해보십시오.
- 시스템 호출에
CLONE_NEWNET
대한 플래그를 clone
사용하거나 ip netns add
및 ip netns exec
명령 을 사용하여 새 네트워크 네임 스페이스를 작성하십시오 .
- 이 네임 스페이스에서
tun
드라이버 또는를 사용하여 가상 네트워크 인터페이스 세트를 상자에 넣습니다 ip link add
.
- 다음을 사용하여 구성을로드하십시오.
iptables-restore
tun
또는 veth
장치를 통해 많은 패킷을 규칙에 공급
tun
또는 veth
장치 에서 올바른 패킷을 가져 오는지 확인하십시오.
이 방법은 전달 된 패킷에 대한 규칙을 테스트하는 데 가장 효과적 일 것입니다. iptables가 사용되는 머신과의 연결에는 약간의 노력이 필요하지만이 방법으로도 테스트 할 수 있어야합니다.
다음은 사용할 수있는 명령 시퀀스의 예입니다.
ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host
ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host
ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2
ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host
이것은 테스트를위한 3 개의 네트워크 네임 스페이스를 생성하고 그 중 하나에 iptables 규칙 세트를로드합니다. 다른 두 사람은 인터넷상의 일부 사람과 LAN상의 호스트 역할을합니다.
위의 예제에서 첫 번째 telnet
명령은 test-iptables-lan-host
네임 스페이스 에서 연결을 거부 하고 두 번째 telnet
명령은 규칙 세트가 패킷을 삭제하면 시간 종료됩니다.
이것은 초기 네트워크 네임 스페이스를 건드리지 않습니다. 이는 기본적으로 모든 프로덕션에서 발생하는 네임 스페이스입니다. 프로덕션에서 더 많은 분리를 얻는 유일한 방법은 별도의 호스트 (실제 또는 가상)에서 실행하는 것입니다.