如何用Linux安装TCP/IP路由器 route subnet arp

本文介绍了用Linux安装TCP/IP路由器的方法,包括Linux当Router的先决条件,如确认Kernel支持IP Forwarding、抓取两块网卡;还说明了规划Subnet的IP address、设定Router和Subnet中机器的网络地址与Kernel Routing table,以及设定Proxy ARP连通Subnet等内容。
如何用Linux安装TCP/IP路由器
推荐:longertree  发表日期:2001年5月18日  阅读次数:250
--------------------------------------------------------------------------------

以下将针对各个主题加以说明:

* Linux 当 Router 的先决条件。
* 如何规划 Subnet 的 IP address。
* 如何设定 Router 的网路位址。
* 如何设定 Router 的 Kernel Routing table。
* 如何设定 Subnet 中机器的网路位址与 Kernel Routing table。
* 设定 Proxy ARP 来连通 Subnet。

                                      

Linux 当 Router 的先决条件

要以 Linux 当 Router,首先必须确认你的 Linux Kernel 中有支援 IP Forwarding
的功能,也就是在 make Kernel 时,要选择 IP Forwarding 的选项。

在图中,Router 分别以两块网路卡连接 Class B net 与 Subnet,所以让
Linux 在开机的时候就要抓到这两块网路卡,成了一先决的条件。其方法是在

/etc/lilo。conf 中加入

append="ether=irq_0,io_port_0,eth0 ether=irq_1,io_port_1,eth1"

後,再值行 lilo -C lilo。conf,之後再重新开机,应该就可以抓到两块网路卡了。
要检查是否有抓到两块网路卡的话,可以看 /proc/net/dev 档中是否有 eth0 和
eth1 两个网路介面,或是值行 ifconfig,看是否有 eth0 和 eth1 两个网路介面,
若是没有的话,有可能是你的 Kernel 没有支援那种网路卡,那就必须再重新
make Kernel,将那种网路卡的选项包含进来。

                                      

如何规划 Subnet 的 IP address

图中 Router 的两个网路介面分别连接两个 net,且各有其 IP address,
eth0=140.115.50.67 为连接 Class B net 的 IP address
eth1=140.115.50.161 为连接 Subnet 的 IP address
现在我们就要来看看如何规划 Subnet.
首先我们要先决定 Subnet 中有几台机器,也就是要划分几个 IP address 於 Subnet
中,我以 Subnet 中有 32 台机器为例加以说明.因此 Subnet 之 IP 范围为
140.115.50.160 ~ 140.115.50.191,WHY??

140.115.50.160 ===> 140.115.50.101 00000
^^^^^^^^^^^^^^ ^^^^^
network address host address

140.115.50.191 ===> 140.115.50.101 11111
^^^^^^^^^^^^^^ ^^^^^
network address host address

其 netmask 皆为

255.255.255.224 ===> 255.255.255.111 00000
^^^^^^^^^^^^^^^ ^^^^^
其 broadcast 皆为

140.115.50.191 ===> 140.115.50.101 11111
^^^^^^^^^^^^^^ ^^^^^

host address 有 5 个 bit,因此可以决定 2^5 = 32 台机器,当然同理你也可以用 140.115.50.96 ~ 140.115.50.127 为你的 Subnet address,只要不和别人相冲就好了.

所以我们可以将 Subnet 的网路设定做一个整理:

IP address = 140.115.50.160 ~ 140.115.50.191
netmask = 255.255.255.224
broadcast = 140.115.50.191
network address = 140.115.50.160

                                      

如何设定 Router 的网路位址

决定好 Subnet 的 IP address 後,接下来就是 Config eth0 和 eth1 这两个 网路介面,於 /etc/rc.d/rc,inet1 中加入

ifconfig eth0 140.115.50.67 netmask 255.255.0.0 broadcast 140.115.255.255

ifconfig eth1 140.115.50.161 netmask 255.255.255.224 broadcast 140.115.50.191

後,再执行 rc.inet1 或重新开机.可以利用 ifconfig 指令来检查设定是否正确, 以下就是 Router 值行 ifconfig 的输出:

lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:2000 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:24 errors:0 dropped:0 overruns:0

eth0 Link encap:10Mbps Ethernet HWaddr 04:00:23:53:90:21
inet addr:140.115.50.67 Bcast:140.115.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107061 errors:0 dropped:0 overruns:0
TX packets:22060 errors:0 dropped:0 overruns:0
Interrupt:5 Base address:0x290 Memory:d0000-d4000

eth1 Link encap:10Mbps Ethernet HWaddr 12:30:51:47:23:85
inet addr:140.115.50.161 Bcast:140.115.50.191 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107061 errors:0 dropped:0 overruns:0
TX packets:22060 errors:0 dropped:0 overruns:0
Interrupt:6 Base address:0x350 Memory:d8000-db000

                                      

如何设定 Router 的 Kernel Routing table

网路位址设定好後,接下来就是要设定 Kernel Routing table,当 Router 收到一个Packet 时,会依照 Packet 中的目的位址去 Kernel Routing table 比对,而决定该往那一个网路介面送,所以 Kernel Routing table设错了,Packet 就无法由正确的网路介面送到目的地.

Kernel Routing table 的设定亦加入於 /etc/rc.d/rc.inet1

route add -net 140.115.0.0 netmask 255.255.0.0 eth0

route add -net 140.115.50.160 netmask 255.255.255.224 eth1

route add default gw 140.115.1.254 metric 1
^^^^^^^^^^^^^^^^^^^^^^^^^
此为通往校外的 Gateway

後,再执行 rc.inet1 或重新开机,可以利用 route 指令来检查设定是否正确,以下就是Router 值行 route 的输出:

Destination Gateway Genmask Flags MSS Window Use Iface
140.115.50.160 * 255.255.255.224 U 1436 0 234 eth1
140.115.0.0 * 255.255.0.0 U 1436 0 29125 eth0
127.0.0.0 * 255.0.0.0 U 1936 0 34 lo
default 140.115.1.254 * UG 1436 0 79 eth0

                                      

如何设定 Subnet 中机器的网路位址与 Kernel Routing table

Subnet 中的机器其设定方法较 Router 简单.其只有一张网路卡,即 eth0,所以在机器 ds170 的 /etc/rc.d/rc.inet1 中加入

ifconfig eth0 140.115.50.170 netmask 255.255.255.224 broadcast 140.115.50.191

route add -net 140.115.50.160 netmask 255.255.255.224 eth0

route add default gw 140.115.50.161 metric 1
^^^^^^^^^^^^^^^^^^^^^^^^^^
此我们将 Gateway 设为 Router 的 eth1 IP address

                                      

设定 Proxy ARP 来连通 Subnet

以上设定完成後,你就可以由 Router 连上 ds170,亦可以由ds170 联上 Router, 但是若要由 ds170 直接连到外面 Class B net 上之机器,如 dslab,则无法直接连通, 因为ds170 直接将 package(注意是资料不是ARP) 送到 router(可由 static routing table 中决定),router 再帮你在 class B network 中送 ARP,所以 dslab 会听到此ARP ,但当 dslab 要将 ARP 送回来时,由於 router 或 gateway 会将 broadcast 和multicast 的 package 挡下来,而不会forwarding,所以说 dslab 回应的 ARP 无法让 ds170 所收到 ,於是我们需在 Router上设定 Proxy ARP,其功能就是代 subnet 中的机器回应 class B 中机器所 broadcast 的 ARP,让 class B 中要送往 subnet 的package 先送到 router, 之後 router 再帮其送往 subnet 中的机器.

所以应该在 Router 的 /etc/rc.d/rc.inet1 中加入

arp -s 140.115.50.170 04:00:23:53:90:21 pub
^^^^^^^^^^^^^^^^^
此为 Router eth0 介面的 hardware address 



原作者:不详 
来源: http://www.9headbird.com/detail.php3?id=20999 
<think>我们之前已经详细介绍了在Linux上搭建DHCP服务器的过程,以及DHCP客户端获取IP的DORA过程。现在,用户的问题是如何在Windows客户端上配置以通过DHCP从Linux虚拟机(作为DHCP服务器)获取IP地址。下面将分步骤说明如何在Windows系统上设置DHCP客户端。 ### 步骤1:确保网络连接正常 - 将Windows客户端和Linux DHCP服务器连接到同一个局域网(或虚拟网络)中。例如,如果Linux虚拟机使用VirtualBox或VMware,确保网络设置为“桥接模式”或“仅主机模式”(Host-only)或“NAT网络”,使得Windows主机和Linux虚拟机在同一子网内[^1]。 - 验证物理连接:如果是有线网络,确保网线连接正常;如果是无线网络,确保连接到同一个无线接入点。 ### 步骤2:配置Windows网络适配器为自动获取IP 1. **打开网络和共享中心**: - 在Windows任务栏右下角的网络图标上右键单击,选择“打开网络和Internet设置”。 - 或者,通过控制面板 > 网络和Internet > 网络和共享中心。 2. **更改适配器设置**: - 在网络和共享中心中,点击左侧的“更改适配器设置”。 3. **配置网络适配器**: - 找到当前使用的网络适配器(如“以太网”或“WLAN”),右键单击并选择“属性”。 - 在弹出的窗口中,双击“Internet协议版本4(TCP/IPv4)”(或者选中后点击“属性”按钮)。 4. **设置为自动获取IP地址**: - 在IPv4属性窗口中,选择: - **自动获得IP地址** - **自动获得DNS服务器地址** - 点击“确定”保存设置。 - 同样,如果需要配置IPv6,确保“Internet协议版本6(TCP/IPv6)”也设置为自动获取。 ### 步骤3:释放和更新IP地址 在Windows中,可以通过命令行工具来强制更新DHCP租约: 1. **以管理员身份打开命令提示符**: - 在开始菜单搜索“cmd”,右键单击“命令提示符”,选择“以管理员身份运行”。 - 或者使用PowerShell(同样需要管理员权限)。 2. **释放当前IP地址(可选)**: - 如果之前使用的是静态IP或其他配置,先释放当前IP: ```cmd ipconfig /release ``` 执行后,网络连接会暂时断开。 3. **重新获取IP地址**: - 执行以下命令向DHCP服务器请求新的IP地址: ```cmd ipconfig /renew ``` 等待几秒钟,系统会显示新分配的IP地址、子网掩码、默认网关等信息。 4. **检查获取的IP信息**: - 执行`ipconfig /all`查看详细网络配置,确认: - “DHCP已启用”显示为“是” - 获得的IP地址在Linux DHCP服务器配置的地址池范围内(如192.168.1.100-200) - 默认网关和DNS服务器与Linux DHCP服务器配置一致 ### 步骤4:验证网络连通性 - 测试与DHCP服务器的连通性:使用`ping`命令测试Linux虚拟机的IP地址(例如192.168.1.1): ```cmd ping 192.168.1.1 ``` - 测试互联网连接(如果网关配置正确): ```cmd ping www.baidu.com ``` ### 常见问题排查 1. **无法获取IP地址**: - 检查Windows防火墙或安全软件是否阻止了DHCP通信(UDP端口67/68)。 - 确保Linux DHCP服务器已正确运行(使用`systemctl status isc-dhcp-server`检查)。 - 确认Windows客户端和Linux服务器在同一广播域(如相同VLAN或子网)。 2. **获取到169.254.x.x地址**: - 这表示Windows自动分配的APIPA地址,说明未联系到DHCP服务器[^2]。 - 检查物理连接、虚拟机网络设置,以及DHCP服务器配置中的子网声明是否正确。 3. **IP冲突或其他错误**: - 在Linux DHCP服务器日志中查看错误信息(日志路径:`/var/log/syslog`或`/var/log/messages`)。 - 在Windows事件查看器中检查网络相关错误(事件查看器 > Windows日志 > 系统)。 ### 高级配置:为Windows分配固定IP(可选) 如果希望为特定Windows设备分配固定IP(基于MAC地址),可在Linux DHCP服务器配置中添加保留地址[^2]: 1. 在Linux服务器上: - 编辑`/etc/dhcp/dhcpd.conf`,添加: ```bash host win-pc { # 自定义主机标识 hardware ethernet 00:11:22:33:44:55; # Windows网卡的MAC地址 fixed-address 192.168.1.50; # 指定的固定IP } ``` - 重启服务:`sudo systemctl restart isc-dhcp-server` 2. 在Windows客户端: - 执行`ipconfig /release`和`ipconfig /renew`更新IP。 --- ### 相关问题 1. 如何查看Windows网卡的MAC地址? 2. 如果DHCP服务器在虚拟机中,如何配置虚拟网络以保证主机和虚拟机通信? 3. 如何在Windows中查看DHCP租约的详细信息(如租约到期时间)? 4. 如何配置多个DHCP服务器以实现高可用性? 5. DHCP Snooping是什么,如何防止非法DHCP服务器? 如果您遇到具体问题(如虚拟机网络配置),请提供更多细节以便进一步指导!</think>### 在Windows客户端配置DHCP自动获取IP地址(Linux服务器环境) 以下是详细配置步骤,确保Windows客户端能从Linux DHCP服务器自动获取IP地址: --- ### 一、Windows客户端配置步骤 #### 1. 打开网络设置 - 右键点击任务栏网络图标 ➜ 选择"打开网络和Internet设置" - 或通过控制面板:`控制面板 > 网络和Internet > 网络和共享中心` #### 2. 配置网络适配器 1. 点击"更改适配器设置" 2. 右键点击当前使用的网络适配器(有线选"以太网",无线选"WLAN") 3. 选择"属性" #### 3. 设置IPv4自动获取 1. 双击"Internet协议版本4(TCP/IPv4)" 2. 选择: - ✅ **自动获得IP地址** - ✅ **自动获得DNS服务器地址** 3. 点击"确定"保存设置 ![Windows DHCP配置界面](https://example.com/dhcp-win-config.png) #### 4. 强制更新IP地址(命令行操作) 1. 以管理员身份打开命令提示符: ```cmd ipconfig /release # 释放当前IP ipconfig /renew # 从DHCP获取新IP ``` 2. 验证获取结果: ```cmd ipconfig /all ``` 检查输出中: - `DHCP Enabled: Yes` - `IPv4 Address`应在Linux服务器配置的地址池范围内 - `DHCP Server`应显示Linux服务器的IP --- ### 二、Linux服务器端验证要点 1. **服务器配置检查**: - 确认`/etc/dhcp/dhcpd.conf`包含Windows所在子网配置[^1] ```bash subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; } ``` 2. **服务状态验证**: ```bash sudo systemctl status isc-dhcp-server # 确认服务运行 sudo tail -f /var/log/syslog # 查看实时分配日志 ``` 3. **租约文件检查**: ```bash cat /var/lib/dhcp/dhcpd.leases # 查看已分配租约 ``` 应包含类似条目: ``` lease 192.168.1.105 { starts 5 2024/05/17 08:00:00; hardware ethernet 00:15:5d:01:23:45; # Windows MAC地址 } ``` --- ### 三、连通性测试 1. **基础测试**: ```cmd ping 192.168.1.1 # 测试网关连通性 ping 8.8.8.8 # 测试互联网访问 nslookup www.example.com # 测试DNS解析 ``` 2. **详细网络诊断**: ```cmd netsh interface ip show config # 显示完整IP配置 route print # 查看路由表 ``` --- ### 四、故障排除指南 | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | 获取169.254.x.x地址 | DHCP服务器不可达 | 检查Linux防火墙:`sudo ufw allow 67/udp`[^2] | | 获取错误子网IP | 子网配置错误 | 确认Linux的`subnet`声明匹配物理网络 | | 持续"正在获取IP" | MAC地址冲突 | 在Linux配置中为Windows分配固定IP[^2]: ```bash host win-pc { hardware ethernet 00:15:5d:01:23:45; fixed-address 192.168.1.150; } ``` | 能ping通IP但无法上网 | DNS配置问题 | 在Linux DHCP添加:`option domain-name-servers 8.8.8.8;` | --- ### 五、高级配置技巧 1. **租约时间优化**: ```bash # Linux服务器配置 default-lease-time 86400; # 1天租约(秒) max-lease-time 172800; # 最大2天 ``` 2. **保留IP绑定**: 1. Windows查询MAC地址: ```cmd ipconfig /all | find "Physical Address" ``` 2. Linux添加保留配置: ```bash host win-laptop { hardware ethernet 00:1A:4B:XX:XX:XX; fixed-address 192.168.1.188; } ``` 3. **跨网段支持**: - 若Windows/Linux在不同子网: ```bash # 在路由器配置DHCP中继 sudo apt install dhcp-relay ``` > **关键提示**:Windows默认每24小时续租一次IP,强制更新可运行: > ```cmd > ipconfig /renew && arp -d * > ``` --- ### 相关问题 1. 如何查看Windows当前的DHCP租约到期时间? 2. 当Linux DHCP服务器迁移时,如何平滑过渡IP分配? 3. 如何配置Windows在DHCP失败时使用备用静态IP? 4. DHCP Snooping技术如何防止恶意DHCP服务器攻击? 5. 如何在Wireshark中捕获和分析DHCP通信过程? 遇到具体问题可提供以下信息进一步诊断: - Windows的`ipconfig /all`输出 - Linux的`/var/log/syslog`相关条目 - 网络拓扑结构示意图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值