有些情况下,需要在一个不安全的网络里去访问内部资源。传统的ACL只能给路由器配置一个可信任的源能访问内部,其他的拒绝。然而,在很多情况下,这并不是很理想,比如如果有一台动态获取IP地址的机器想访问内部资源就很难处理了。

    动态的ACL可以动态的创建访问控制列表,如果一个用户通过了身份验证,那么路由器就动态创建一条允许用户机器IP地址访问内部的表项,还可以设置这个表项的超时时间。

我利用Dynamips搭建了这样的一个环境:

R1-f0/0————f0/0-R2-f1/0————f0/0-R3

    其中R1代表不安全的网络端,R3代表内部网络。R1的f0/0:192.168.10.1/24;R2的f0/0:192.168.10.2/24;f1/0:192.168.11.1/24;R3的f0/0:192.168.11.2/24,为了使R1和R3能互通需要在两台路由器上配置好相应的静态路由。

下面开始对R2进行ACL的设置:

interface FastEthernet0/0
 ip address 192.168.10.2 255.255.255.0
 ip access-group 100 in 

access-list 100 permit tcp any host 192.168.10.2 eq telnet
access-list 100 dynamic test timeout 10 permit ip any 192.168.11.0 0.0.0.255

    第二个表项就是动态访问控制列表的设置了,其中test是动态ACL的名字,因为需要进行身份验证的源IP并不知道在什么地方,它可以是Internet上的任何一台主机,所以置为any。

但是这个动态的ACL并不会自动应用,从R1上Ping一下内部看一看:

R1#ping 192.168.11.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)

    要想让R1可以通过R2,需要使用access-enable来启动动态ACL,这条命令是从VTY上运行的。我希望它能够从客户端一登录就自动运行这条命令:

line vty 0 2
 login
 password 123
 autocommand  access-enable host

然后从R1上进行Telnet:

R1#telnet 192.168.10.2
Trying 192.168.10.2 … Open
User Access Verification
Password:
[Connection to 192.168.10.2 closed by foreign host]

 

输入完密码后,链接自动断开。这时候再去访问内部资源,比如Ping一下R3:

R1#ping 192.168.11.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 176/320/476 ms

 

再去R2上去查看一下ACL:

R2#sh ip access-lists
Extended IP access list 100
    10 permit tcp any host 192.168.10.2 eq telnet (288 matches)
    20 Dynamic test permit ip any 192.168.11.0 0.0.0.255
       permit ip host 192.168.10.1 192.168.11.0 0.0.0.255 (5 matches)

    这时候就发现多了一条允许R1通过的条目。因为我在动态ACL上设置了timeout 10,也就是这个动态ACL会在10分钟之后超时,所以过10分钟再试:

R2#sh ip access-lists
Extended IP access list 100
    10 permit tcp any host 192.168.10.2 eq telnet (288 matches)
    20 Dynamic test permit ip any 192.168.11.0 0.0.0.255

刚才那条动态生成的ACL表项又自动清除掉了。从R1去Ping R3已经又不通了:

R1#ping 192.168.11.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)