目的:学习NAT如何实现负载均衡。
在R2上做NAT负载,使R1 telnet R2的S2/2接口,分别跳转到摸拟内部服务器的R3,R4。
Step 1:=====================
R1:
int s2/2
no sh
ip add 12.1.1.1 255.255.255.0
R2:
int s2/2
no sh
ip add 12.1.1.2 255.255.255.0
int f0/0
no sh
ip add 192.168.1.1 255.255.255.0
R3:
int f0/0
no sh
ip add 192.168.1.3 255.255.255.0
R4:
int f0/0
no sh
ip add 192.168.1.4 255.255.255.0
Step 2:======================================
R3,R4:
enable password cisco
line vty 0 4
password cisco
login
Step 3:Disable route function and set up default-gateway======
R3,R4:
no ip routing
ip default-gateway 192.168.1.1
Step 4:==============================
R2:
int s0/0
ip nat outside
int f0/0
ip nat inside
access-list 1 permit 12.1.1.2 0.0.0.0
ip nat pool NAT 192.168.1.3 192.168.1.4 netmask 255.255.255.0 type rotary
ip nat inside destination list 1 pool NAT
Step 5: Test===============================
R1#telnet 12.1.1.2
配置方法比较简单,只是需要注意被调用的ACL配置:
环境:
R2(s1)------(s1)R1(e0)-----(e0)R3
R1上配置具体实验,R2测试发起telnet,R3被telnet
1,如果使用非扩展访问列表,则将内部主机对外表现的内部全局地址作为ACL配置部分,如:
access-list 1 permit 内部全局地址.
看测试的例子配置:E0是内口,S1是外口,1.1.12.1为代表内部的内部全局地址.
interface Ethernet0
ip address 10.0.0.4 255.255.255.0
ip nat inside
interface Serial1
ip address 1.1.12.1 255.255.255.0
ip nat outside
ip nat pool PL 10.0.0.1 10.0.0.2 prefix-length 24 type rotary
access-list 1 permit 1.1.12.1
看对应的调试信息:
2509rj#1
[Resuming connection 1 to r1 ... ]
*Mar 1 01:38:36.635: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1#
*Mar 1 01:38:38.635: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1#
*Mar 1 01:38:42.635: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1#
R2#
R2#telnet 1.1.12.1
Trying 1.1.12.1 ...
% Connection timed out; remote host not responding
10.0.0.1是我的笔记本地址,未开TELNET功能,所以此时发起TLNET的路由器应该连不上
再重新telnet,这次如果被转换成10.0.0.2那么就应该能登陆到R3路由器上,因为10.0.0.2是R3的地址.:
*Mar 1 01:38:50.635: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1#
*Mar 1 01:39:09.331: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.2 [0]
*Mar 1 01:39:09.347: NAT: s=10.0.0.2->1.1.12.1, d=1.1.12.2 [0]
*Mar 1 01:39:09.371: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.2 [1]
*Mar 1 01:39:09.379: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.2 [2]
*Mar 1 01:39:09.387: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.2 [3]
*Mar 1 01:39:09.407: NAT: s=10.0.0.2->1.1.12.1, d=1.1.12.2 [1]
*Mar 1
*Mar 1 01:39:50.635: NAT: expiring 1.1.12.1 (10.0.0.1) tcp 23 (23)
R1#
从上面的信息可以看出,这次被转成了10.0.0.2
R2#telnet 1.1.12.1
Trying 1.1.12.1 ... Open
User Access Verification
Password:
成功,提示我输入密码.
2.如果使用扩展ACL,那么应该将内部全局地址指定为ACL中的目标地址:
看配置范例:
我们将ACL改成access-list 122 permit ip host 1.1.12.1 any
然后重新调用 R1(config)#ip nat inside destination list 112 pool PL
这个时候,故意将1.1.12.1作为ACL中源地址,目标地址任意,看这个时候能否发生转换
R1#show ip nat trans
R1#
注意看,没有NAT条目,说明没有发生转换.
R2#telnet 1.1.12.1
Trying 1.1.12.1 ... Open
Password required, but none set
[Connection to 1.1.12.1 closed by foreign host]
R2的信息则返回说需要密码,但未被设置,很明显,R2试图直接TELNET R1了,而不是通过R1的转换TELNET r3
3.将扩展ACL的目标地址改成内部全局地址,看是什么结果:
将ACL改成R1(config)#access-list 112 permit ip any host 1.1.12.1
2509rj#1
[Resuming connection 1 to r1 ... ]
*Mar 1 01:51:46.763: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1(config)#
*Mar 1 01:51:48.763: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1(config)#
*Mar 1 01:51:52.763: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1(config)#
*Mar 1 01:52:00.763: NAT: s=1.1.12.2, d=1.1.12.1->10.0.0.1 [0]
R1(config)#
调试信息显示发生了转换.
总结:
1.测试的时候不要用PING,因为这个NAT的负载均衡只对TCP协议,所以用TELNET测试.
2.需要确保路由器之间能正常进行选路,否则可能会发生,看到转换了却无法TELNET进去.
3.内部全局地址也可以分配到环回地址,只要符ACL的就可以引发转换.