Linux防火墙NAT之SIP 网络拓扑讲解,natsip


环境:

防火墙 - Ubuntu Server 17.10.

SIP - Yate客户端,Asterisk服务器

网络拓扑:

\

1)防火墙配置IP,打开转发:

   ifconfig enp2s0 192.168.1.131
   ifconfig enp3s0 192.168.100.1
   
   echo 1 > /proc/sys/net/ipv4/ip_forward

2)加载nf_nat_sip模块建立expectations:

modprobe nf_nat_sip

3)配置FORWARD链,仅接收192.168.1.0/24网段的新建数据流和已建立或关联的数据流:

   iptables -t filter -P FORWARD DROP
   iptables -t filter -A FORWARD -s 192.168.1.0/24 -j ACCEPT
   iptables -t filter -A FORWARD -p udp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
   iptables -t filter -A FORWARD -j LOG

4)使能conntrack的SIP helper:

   echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
   或者:
   iptables -t raw -A PREROUTING -p udp -m udp --dport 5060 -j CT --helper sip

5) 配置SNAT:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.100.1

6)检查conntrack建立情况:

root@localhost:~# conntrack  -L
udp      17 28 src=192.168.1.104 dst=192.168.100.100 sport=20551 dport=15061 src=192.168.100.100 dst=192.168.100.1 sport=15061 dport=20551 mark=0 use=1
udp      17 179 src=192.168.1.104 dst=192.168.100.100 sport=20550 dport=15060 src=192.168.100.100 dst=192.168.100.1 sport=15060 dport=20550 [ASSURED] mark=0 use=1
udp      17 3596 src=192.168.1.104 dst=192.168.100.100 sport=65309 dport=5060 src=192.168.100.100 dst=192.168.100.1 sport=5060 dport=65309 [ASSURED] mark=0 helper=sip use=3
root@localhost:~#

创建了一条dport等于5060的主session和一条RTP(dport等于20550)、一条RTCP的子session。

或者配置DNAT:

iptables -t nat -A PREROUTING -d 192.168.1.131 -i enp2s0 -j DNAT --to-destination 192.168.100.100

再次检查conntrack建立情况:

root@localhost:~# conntrack -L
udp      17 179 src=192.168.1.104 dst=192.168.1.131 sport=29448 dport=16988 src=192.168.100.100 dst=192.168.1.104 sport=16988 dport=29448 [ASSURED] mark=0 use=1
udp      17 3595 src=192.168.1.104 dst=192.168.1.131 sport=53966 dport=5060 src=192.168.100.100 dst=192.168.1.104 sport=5060 dport=53966 [ASSURED] mark=0 helper=sip use=3
udp      17 27 src=192.168.1.104 dst=192.168.1.131 sport=29449 dport=16989 src=192.168.100.100 dst=192.168.1.104 sport=16989 dport=29449 mark=0 use=1
root@localhost:~#

测试间隔必须清空conntrack -D,以免残留connection对新连接造成影响。

相关内容