SW 개발

[linux admin] iptable 이용한 패킷포워딩

. . . 2019. 8. 21. 13:41
반응형

[linux admin] 두 인터페이스간 패킷포워딩 (iptable)

패킷포워딩?

A 인터페이스에서 B 인터페이스로 모든 패킷을 전달한다. 즉 인터페이스간의 연결을 하면된다.

2 패킷포워딩 하기전에 아래의 패킷포워딩 룰을 쓰기위해선..iptables 유틸과 관련 커널 feature 가 필요하다.

필요한 커널 모듈(feature)

arp_tables.ko
arpt_mangle.ko
arptable_filter.ko
ip_tables.ko
ipt_MASQUERADE.ko
ipt_NETMAP.ko
ipt_REDIRECT.ko
iptable_filter.ko
iptable_nat.ko
iptable_raw.ko
nf_conntrack_ipv4.ko
nf_defrag_ipv4.ko
nf_nat.ko
nf_nat_snmp_basic.ko

패킷 포워딩 룰

ppp0 과 ppp1 간의 패킷을 포워딩하는 스크립트 예제

  • 다음 예제의 내부 192.168.1.0 대역이다.
#!/bin/sh

EXTIF="ppp0"
INTIF="ppp1"

IPTABLES_BIN_PATH="/usr/sbin/iptables"

# echo "---> External Ethernet Interface : $EXTIF"
# echo "---> Internal Ethernet Interface : $INTIF"

echo "---> iptables module up <---"
# /sbin/depmod -a
/sbin/modprobe ip_tables
# /sbin/insmod ip_conntrack
# /sbin/insmod ip_conntrack_ftp
# /sbin/insmod ip_nat_ftp
# /sbin/insmod iptable_nat

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

#
# IP forwarding / Masquerading ??
#

echo "---> Setting up IP forwarding/masquerading <---"

$IPTABLES_BIN_PATH -P INPUT ACCEPT
$IPTABLES_BIN_PATH -F INPUT
$IPTABLES_BIN_PATH -P OUTPUT ACCEPT
$IPTABLES_BIN_PATH -F OUTPUT
$IPTABLES_BIN_PATH -P FORWARD DROP
$IPTABLES_BIN_PATH -F FORWARD
$IPTABLES_BIN_PATH -t nat -F

echo "---> step 1 complete"

$IPTABLES_BIN_PATH -A FORWARD -i $EXTIF -o $INTIF -j ACCEPT
$IPTABLES_BIN_PATH -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
#$IPTABLES_BIN_PATH -A FORWARD -j LOG

echo "---> step 2 complete"

$IPTABLES_BIN_PATH -t nat -A POSTROUTING -o $EXTIF -s 192.168.1.0/24 -j MASQUERADE

echo "---> step 3 complete"

룰 설정확인

iptables --list-rule 명령어로 iptables 의 rule 을 확인할수있다.

확인결과

# 확인결과
# iptables --list-rule
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-A FORWARD -i ppp0 -o ppp1 -j ACCEPT 
-A FORWARD -i ppp1 -o ppp0 -j ACCEPT
반응형