两台笔记本 A和B
A: Ubuntu 11.04 + 有线网卡(eth0) + 无线网卡(eth1)
B: Windows 7 + 有线网卡 + 无线网卡
A,B的无线网卡都连接到家庭无线路由器,网关为192.168.0.1,可以上互联网。A,B的有线网卡通过网线直连,A作为DHCP server和网关,为B的有线网卡分配IP地址
A安装DHCP server步骤:
1. sudo apt-get install dhcp3-server
2. vi /etc/default/isc-dhcp-server
INTERFACES="eth0"
3. 给eth0配置ipv4静态地址: 192.168.1.1。
注意不要用network connection配置静态IP,它不会写/etc/network/interfaces文件,导致dhcp server无法自动启动。
为了使DHCP server在启动时自动启动,vi /etc/network/interfaces, 加入:
auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255
4.vi /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.200; option broadcast-address 192.168.1.255; option routers 192.168.1.1; default-lease-time 6000; max-lease-time 8000000; }
5. sudo /etc/init.d/isc-dhcp-server start
如果出错,查看/var/log/syslog的错误提示
A安装玩DHCP server后,B的有线网卡可以分配到IP地址。但是B不能上互联网了。
route print
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.99 26
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.10 10
连互联网时都走HOP数小的192.168.1.1路由,导致无法上互联网。
运行下面命令解决问题:
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 192.168.0.1
route add 192.168.1.0 mask 255.255.255.0 192.168.1.1
实验2:B关闭无线网卡,希望通过A作为路由器来连互联网
1. 在DHCP服务器的配置文件中,加入DNS服务器。这样B才能通过A知道DNS服务器的地址
vi /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.200; option broadcast-address 192.168.1.255; option routers 192.168.1.1;
option domain-name-servers 180.168.255.18; default-lease-time 6000; max-lease-time 8000000; }
2.
A中打开ip包转发功能, vi /etc/sysctl.conf,删除下面一行的注释
net.ipv4.ip_forward=1
(sudo sysctl -p 使改变的配置立即生效)
同时添加iptables(临时方法,重启后会失效):
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
sudo iptables-save 永久保存
(-o eth1 指定output network interface为eth1)
实验3:A使用radvd(Router Advertisement Daemon)为B分配ipv6地址
radvd 使用 (NDP) as specified in
1. sudo apt-get install radvd
2. vi /etc/radvd.conf (需新建该文件),如下面几行:
interface eth0 { MinRtrAdvInterval 3; MaxRtrAdvInterval 10; AdvLinkMTU 1280; AdvSendAdvert on; prefix fec0:1111:2222:3333::/64 { AdvOnLink on; AdvAutonomous on; AdvValidLifetime 86400; AdvPreferredLifetime 86400; AdvRouterAddr on; }; };
3. 在/etc/sysctl.conf 中打开 net.ipv6.conf.all.forwarding=1
4. sudo /etc/init.d/radvd start
(如果在 radvd 运行状态下重启机器,radvd 会在开机后自动运行)
5. 在B上运行ipconfig:
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . : 本地站点的 IPv6 地址. . . . . . . : fec0:1111:2222:3333:a432:4f4d:72bf:ed0a%1
本地链接 IPv6 地址. . . . . . . . : fe80::a432:4f4d:72bf:ed0a IPv4 地址 . . . . . . . . . . . . : 192.168.1.10 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : fe80::211:43ff:fe76:cb8
注意windows下 fec0:1111:2222:3333:a432:4f4d:72bf:ed0a%1 中的%1表示网络接口编号
ping本机地址:
C:\>ping fec0:1111:2222:3333:a432:4f4d:72bf:ed0a (本地站点地址)
正在 Ping fec0:1111:2222:3333:a432:4f4d:72bf:ed0a 具有 32 字节的数据: 来自 fec0:1111:2222:3333:a432:4f4d:72bf:ed0a 的回复: 时间<1ms
C:\>ping fe80::a432:4f4d:72bf:ed0a (本地链路地址)
正在 Ping fe80::a432:4f4d:72bf:ed0a 具有 32 字节的数据: 来自 fe80::a432:4f4d:72bf:ed0a 的回复: 时间<1ms
6.A 上运行ifconfig
$ifconfig
eth0 Link encap:Ethernet HWaddr 00:11:43:76:0c:b8 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::211:43ff:fe76:cb8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4634 errors:0 dropped:0 overruns:0 frame:0 TX packets:1299 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:677921 (677.9 KB) TX bytes:178937 (178.9 KB) Interrupt:18
ping本机地址 (注意linux上ping6的用法,必须指定接口):
$ ping6 -I eth0 fe80::211:43ff:fe76:cb8
PING fe80::211:43ff:fe76:cb8(fe80::211:43ff:fe76:cb8) from fe80::211:43ff:fe76:cb8 eth0: 56 data bytes 64 bytes from fe80::211:43ff:fe76:cb8: icmp_seq=1 ttl=64 time=0.046 ms
7. B ping A
C:\>ping fe80::211:43ff:fe76:cb8
正在 Ping fe80::211:43ff:fe76:cb8 具有 32 字节的数据: 来自 fe80::211:43ff:fe76:cb8 的回复: 时间<1ms
8. A ping B
$ ping6 -I eth0 fe80::a432:4f4d:72bf:ed0a PING fe80::a432:4f4d:72bf:ed0a(fe80::a432:4f4d:72bf:ed0a) from fe80::211:43ff:fe76:cb8 eth0: 56 data bytes 64 bytes from fe80::a432:4f4d:72bf:ed0a: icmp_seq=1 ttl=64 time=0.733 ms
g$ ping6 -I eth0 fec0:1111:2222:3333:a432:4f4d:72bf:ed0a connect: Network is unreachable
A只能ping通B的本地链路地址,无法ping通本地站点地址。因为使用本地站点地址作为源或目的地址的数据报文不会被转发到本站点(相当于一个私有网络)外的其它站点,B的本地站点地址只能在B本地使用。
实验4: A 使用 wide-dhcpv6-server 为B分配ipv6地址
1. sudo apt-get install wide-dhcpv6-server
2. vi /etc/dhcp/dhcpd6.conf