# 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
## 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
如果你一开始设计的网络环境就是同一个 Class C 的网域,例如 192.168.1.0/24 , 后来因为某些因素必须要将某些主机搬到比较内部的环境中,例如[图 8.2-1](#fig8.2-1)的 clientlinxu, winxp, win7。 然后又因为某些因素,所以你不能变更这些计算机的 IP,此时你的同一网域就会横跨在一个路由器的左右两边了! 举例来说,联机图示有点像底下这样:
![](https://box.kancloud.cn/2016-05-13_5735da4fea8df.gif)
图 8.4-1、在路由器两个界面两边的 IP 是在同一个网域的设定情况
初次见面~看到眼睛快要掉下来哩!怎么路由器的两边的主机 IP 设定都在同一个网域内?而且还被规定不能够更改原先的 IP 设定, ...真是一个头两个大啊~如此一来,在 Linux Router 两边要如何制作路由啊?好问题!真是好问题~ 因为 OSI 第三层网络层的路由是一条一条去设定比对的,所以如果两块网卡上面都是同一个网域的 IP 时, 就会发生错误。那如何处理啊?
我们先从两方面来说,第一个,当从正确的网段 (PC1) 要联机到 PC2~PC4 时,他应该是要透过 Linux Router 那部主机的对外 IP (192.168.1.100) 才行!而且 Linux Router 还必须要让该封包透过内部 IP (192.168.1.200) 联机到 PC2~PC4 。 此时,封包传递的图示有点像这样:
![](https://box.kancloud.cn/2016-05-13_5735da502b2bf.gif)
图 8.4-2、正常的网段想要传送到内部计算机去的封包流向
在这个阶段,我们可以设定PC2~PC4 的 IP 所对应的网卡卡号 (MAC) 都设定在 router 的对外网卡上, 因此, router 的对外接口可以将给 PC2~PC4 的封包给『骗』过来。接下来,就简单的透过路由设定,让封包转个接口发送出去即可。 这样 PC1 --> PC2 的问题解决了,但是 PC2 怎么传送到 PC1 呢?我们可以透过底下的图示来想象一下:
![](https://box.kancloud.cn/2016-05-13_5735da5040ada.gif)
图 8.4-3、内部计算机想要传送到正常网域时的封包流向
当 PC2 要传送的封包是给 PC3, PC4 的,那么这个封包得要能够直接传递。但是如果需要传送到正常网域的封包,就得要透过 router 的对内网卡,再透过路由规则来将该封包导向外部接口来传递才行!这个时候就变成内部的接口欺骗 PC2 说, PC1 与 Router A 的 IP 是在内部这张接口上就是了,然后再透过路由判断将该封包透过外部接口来对外传递出去即可。 假设 Linux router 的对外界面为 eth0 而对内为 eth1 时,我们可以这样说:
1. 当 Linux Router 的 eth0 那个网域主机想要连接到 PC2~PC4 的主机时,由 Linux Router 负责接收;
2. 当 Linux Router 要传送数据到 PC2~PC4 时,务必要由 eth1 来传送;
3. 当内部计算机想要连接到 PC1 或 Router A 时,由 Linux router 的 eth1 负责接收;
4. 当 Linux Router 要传送的数据为 192.168.1.0/24 ,但并非 PC2~PC4 时,需由 eth0 传送。
上列的步骤与图示内的线条上的顺序相符合呦!得要对照着看看。其中的 (1) 与 (3) 就是透过 ARP Proxy (代理) 的功能啦! 那啥是 ARP Proxy 呢?简单的说,就是让我的某张适配卡的 MAC 代理其他主机的 IP 对应,让想要连接到这个 IP 的 MAC 封包由我帮他接下来的意思。举我们图 8.4-1 的例子来说,就是在 Linux Router 的 eth0 界面上,规定 192.168.1.10, 192.168.1.20, 192.168.1.30 这三个 IP 都对应到 eth0 的 MAC 上,所以三个 IP 的封包就会由 eth0 代为收下,因此才叫做 ARP 代理人嘛!所以啦,每一部在 eth0 那端的主机都会『误判』那三个 IP 是 Linux Router 所拥有,这样就能够让封包传给 Linux Router 啦!
再接下来,咱们的 Linux Router 必须要额外指定路由,设定情况为:
- 若目标是 PC2 ~ PC4 时,该路由必须要由内部的 eth1 发送出去才行,
- 若目标不为 PC2 ~ PC4 ,且目标在 192.168.1.0/24 的网域时,需由 eth0 发送出去才行。
也就是说,你必须要指定路由规则当中,那个 PC2~PC4 具有优先选择权,然后其他的同网域封包才由 eth0 来传送。 这样就能够达成我们所想要的结局啦!^\_^!看样子似乎很难,其实设定方面还挺简单的,你可以透过 arp 以及 route 这两个指令来达成喔!
- 外部接口 eth0:08:00:27:71:85:BD
- 内部接口 eth1:08:00:27:2A:30:14
```
# 1\. 先设定外部 eth0 的 ARP Proxy,让三个 IP 对应到自己的 MAC
[root@www ~]# arp -i eth0 -s 192.168.1.10 08:00:27:71:85:BD pub
[root@www ~]# arp -i eth0 -s 192.168.1.20 08:00:27:71:85:BD pub
[root@www ~]# arp -i eth0 -s 192.168.1.30 08:00:27:71:85:BD pub
[root@www ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.30 * * MP eth0
192.168.1.10 * * MP eth0
192.168.1.20 * * MP eth0
# 首先需要让外部接口拥有三个 IP 的操控权,透过这三个指令来建立 ARP 对应!
# 2\. 开始处理路由,增加 PC2~PC4 的单机路由经过内部的 eth1 来传递
[root@www ~]# route add -host 192.168.1.10 eth1
[root@www ~]# route add -host 192.168.1.20 eth1
[root@www ~]# route add -host 192.168.1.30 eth1
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.20 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.10 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.30 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
# 这样就处理好单向的单机路由啰!不过有个问题啊!那就是 192.168.1.0/24
# 的网域,两个接口都可以传送!因此,等一下第四个步骤得要将 eth1 删除才行!
3\. 设定一下内部的 ARP Proxy 工作 (绑在 eth1 上头啰)!
[root@www ~]# arp -i eth1 -s 192.168.1.101 08:00:27:2A:30:14 pub
[root@www ~]# arp -i eth1 -s 192.168.1.254 08:00:27:2A:30:14 pub
# 这样可以骗过 PC2 ~ PC4 ,让这三部主机传递的封包可以透过 router 来传递!
4\. 开始清除掉 eth1 的 192.168.1.0/24 路由
[root@www ~]# route del -net 192.168.1.0 netmask 255.255.255.0 eth1
```
所有的计算机都在同一个网域内,因此 default gatway 都是 192.168.1.254 ,而 netmask 都是 255.255.255.0, 只有 IP 不一样而已。最后,所有的计算机都可以直接跟对方联机,也能够顺利的连上 Internet ! 这样的设定就能够满足上述的功能需求啰!如果一切都没有问题,那么将上述的指令写成一个脚本档, 例如 /root/bin/network.sh ,然后将该档案设定为可执行,并将它写入 /etc/rc.d/rc.local , 同时每次重新启动网络后,就得要重新执行一次该脚本,即可达到你的需求啰!
透过这个案例你也可以清楚的知道,能不能联机其实与路由的关系才大哩! 而路由是双向的,你必须要考虑到这个封包如何回来的问题喔!
- - - - - -
- 鸟哥的Linux私房菜:服务器架设篇 第三版
- 第一部份:架站前的进修专区
- 作者序
- 第一章、架设服务器前的准备工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架设服务器流程
- 1.3 自我评估是否已经具有架站的能力
- 1.4 本章习题
- 第二章、基础网络概念
- 2.1 网络是个什么玩意儿
- 2.2 TCP/IP 的链结层相关协议
- 2.3 TCP/IP 的网络层相关封包与数据
- 2.4 TCP/IP 的传输层相关封包与数据
- 2.5 连上 Internet 前的准备事项
- 2.6 重点回顾:
- 2.7 本章习题
- 2.8 参考数据与延伸阅读
- 第三章、局域网络架构简介
- 3.1 局域网络的联机
- 3.2 本书使用的内部联机网络参数与通讯协议
- 第四章、连上 Internet
- 4.1 Linux 连上 Internet 前的注意事项
- 4.2 连上 Internet 的设定方法
- 4.3 无线网络--以笔记本电脑为例
- 4.4 常见问题说明
- 4.5 重点回顾
- 4.6 本章习题
- 4.7 参考数据与延伸阅读
- 第五章、 Linux 常用网络指令
- 5.1 网络参数设定使用的指令
- 5.2 网络侦错与观察指令
- 5.3 远程联机指令与实时通讯软件
- 5.4 文字接口网页浏览
- 5.5 封包撷取功能
- 5.6 重点回顾
- 5.7 本章习题
- 5.8 参考数据与延伸阅读
- 第六章、 Linux 网络侦错
- 6.1 无法联机原因分析
- 6.2 处理流程
- 6.3 本章习题
- 6.4 参考数据与延伸阅读
- 第二部分:主机的简易资安防护措施
- 第七章、网络安全与主机基本防护:限制端口, 网络升级与 SELinux
- 7.1 网络封包联机进入主机的流程
- 7.2 网络自动升级软件
- 7.3 限制联机埠口 (port)
- 7.4 SELinux 管理原则
- 7.5 被攻击后的主机修复工作
- 7.6 重点回顾
- 7.7 课后练习
- 7.8 参考数据与延伸阅读
- 第八章、路由观念与路由器设定
- 8.1 路由
- 8.2 路由器架设
- 8.3 动态路由器架设:quagga (zebra + ripd)
- 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
- 8.5 重点回顾
- 8.6 本章习题
- 8.7 参考数据与延伸阅读
- 第九章、防火墙与 NAT 服务器
- 9.1 认识防火墙
- 9.2 TCP Wrappers
- 9.3 Linux 的封包过滤软件:iptables
- 9.4 单机防火墙的一个实例
- 9.5 NAT 服务器的设定
- 9.6 重点回顾
- 9.7 本章习题
- 9.8 参考数据与延伸阅读
- 第十章、申请合法的主机名
- 10.1 为何需要主机名
- 10.2 注册一个合法的主机名
- 10.3 重点回顾
- 10.4 本章习题
- 10.5 参考数据与延伸阅读
- 第三部分:局域网络内常见的服务器架设
- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
- 11.1 远程联机服务器
- 11.2 文字接口联机服务器: SSH 服务器
- 11.3 最原始图形接口: Xdmcp 服务的启用
- 11.4 华丽的图形接口: VNC 服务器
- 11.5 仿真的远程桌面系统: XRDP 服务器
- 11.6 SSH 服务器的进阶应用
- 11.7 重点回顾
- 11.8 本章习题
- 11.9 参考数据与延伸阅读
- 第十二章、网络参数控管者: DHCP 服务器
- 12.1 DHCP 运作的原理
- 12.2 DHCP 服务器端的设定
- 12.3 DHCP 客户端的设定
- 12.4 DHCP 服务器端进阶观察与使用
- 12.5 重点回顾
- 12.6 本章习题
- 12.7 参考数据与延伸阅读
- 第十三章、文件服务器之一:NFS 服务器
- 13.1 NFS 的由来与其功能
- 13.2 NFS Server 端的设定
- 13.3 NFS 客户端的设定
- 13.4 案例演练
- 13.5 重点回顾
- 13.6 本章习题
- 13.7 参考数据与延伸阅读
- 第十四章、账号控管: NIS 服务器
- 14.1 NIS 的由来与功能
- 14.2 NIS Server 端的设定
- 14.3 NIS Client 端的设定
- 14.4 NIS 搭配 NFS 的设定在丛集计算机上的应用
- 14.5 重点回顾
- 14.6 本章习题
- 14.7 参考数据与延伸阅读
- 第十五章、时间服务器: NTP 服务器
- 15.1 关于时区与网络校时的通讯协议
- 15.2 NTP 服务器的安装与设定
- 15.3 客户端的时间更新方式
- 15.4 重点回顾
- 15.5 本章习题
- 15.6 参考数据与延伸阅读
- 第十六章、文件服务器之二: SAMBA 服务器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服务器的基础设定
- 16.3 Samba 客户端软件功能
- 16.4 以 PDC 服务器提供账号管理
- 16.5 服务器简单维护与管理
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考数据与延伸阅读
- 第十七章、区网控制者: Proxy 服务器
- 17.1 什么是代理服务器 (Proxy)
- 17.2 Proxy 服务器的基础设定
- 17.3 客户端的使用与测试
- 17.4 服务器的其他应用设定
- 17.5 重点回顾
- 17.6 本章习题
- 17.7 参考数据与延伸阅读
- 第十八章、网络驱动器装置: iSCSI 服务器
- 18.1 网络文件系统还是网络驱动器
- 18.2 iSCSI target 的设定
- 18.3 iSCSI initiator 的设定
- 18.4 重点回顾
- 18.5 本章习题
- 18.6 参考数据与延伸阅读
- 第四部分:常见因特网服务器架设
- 第十九章、主机名控制者: DNS 服务器
- 19.1 什么是 DNS
- 19.2 Client 端的设定
- 19.3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
- 19.4 DNS 服务器的详细设定
- 19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 19.6 DNS 服务器的进阶设定
- 19.7 重点回顾
- 19.8 本章习题
- 19.9 参考数据与延伸阅读
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服务器之三: FTP 服务器
- 21.1 FTP 的数据链路原理
- 21.2 vsftpd 服务器基础设定
- 21.3 客户端的图形接口 FTP 联机软件
- 21.4 让 vsftpd 增加 SSL 的加密功能
- 21.5 重点回顾
- 21.6 本章习题
- 21.7 参考数据与延伸阅读
- 第二十二章、邮件服务器: Postfix
- 22.1 邮件服务器的功能与运作原理
- 22.2 MTA 服务器: Postfix 基础设定
- 22.3 MRA 服务器: dovecot 设定
- 22.4 MUA 软件:客户端的收发信软件
- 22.5 邮件服务器的进阶设定
- 22.6 重点回顾
- 22.7 本章习题
- 22.8 参考数据与延伸阅读