DHCP包不穿越tun0接口

DHCP包不穿越tun0接口

我在远程办公室有以下设置:

--- vlan interface --- Remote Router --tun0--> Main office Firewall --> Active Directory DHCP

我用来dhcp3-relay将 dhcp 请求(广播)转发到我的主 AD 服务器(单播)。问题是:dhcp 请求到达远程路由器 vlan 接口(广播),通过路由正确转发到我们的 AD 服务器,给出答案,但在接收数据包时,它不会从内部转发tun0vlanXXX远程路由器的接口请求最初来自哪里。这是tcpdump远程路由器的输出。

tun0界面:

tcpdump -i tun0 -nevvv udp port 67 or 68

13:23:45.049995 Out ethertype IPv4 (0x0800), length 592: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 576) IP.VPN.REMOTE.OFFICE.67 > IP.OF.AD.SERVER.67: BOOTP/DHCP, Request from MAC:ADDR:OF:THE:REMOTE:CLIENT, length 548, hops 1, xid 0x2c896edc, secs 11527, Flags [none] (0x0000)
          Gateway-IP IP.OF.NET.GATEWAY
          Client-Ethernet-Address MAC:ADDR:OF:THE:REMOTE:CLIENT [|bootp]

13:23:45.145014  In ethertype IPv4 (0x0800), length 350: (tos 0x0, ttl 125, id 24829, offset 0, flags [none], proto UDP (17), length 334) IP.OF.AD.SERVER.67 > IP.OF.NET.GATEWAY.67: BOOTP/DHCP, Reply, length 306, xid 0x2c896edc, Flags [none] (0x0000)
          Your-IP NEW.LEASE.FROM.AD
          Server-IP IP.OF.AD.SERVER
          Gateway-IP IP.OF.NET.GATEWAY
          Client-Ethernet-Address MAC:ADDR:OF:THE:REMOTE:CLIENT [|bootp]

在这里你可以看到数据包被dhcrelay软件正确转发到我们的总部,并且AD给主机一个新的租约。我们已经在其他不基于 openvpn (mpls) 的链接上使用此解决方案,以将 IP 分配到远程办公室。

vlanXXX界面:

tcpdump -i vlanXXX -nevvv udp port 67 or 68

13:21:45.022067 MAC:ADDR:OF:THE:REMOTE:CLIENT > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 590: (tos 0x0, ttl 64, id 147, offset 0, flags [none], proto UDP (17), length 576) 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from MAC:ADDR:OF:THE:REMOTE:CLIENT, length 548, xid 0x496364c3, secs 11407, Flags [none] (0x0000)
          Client-Ethernet-Address MAC:ADDR:OF:THE:REMOTE:CLIENT [|bootp]

tun0我们只能看到来自主机的广播请求,但看不到到达并应路由到的答案vlanXXX

此外,远程路由器对此协议非常宽容:

iptables -A INPUT  -p udp --sport 67:68 --dport 67 -j ACCEPT
iptables -A OUTPUT -p udp --sport 67 --dport 67:68 -j ACCEPT
iptables -A FORWARD -p udp --sport 67:68 --dport 67 -j ACCEPT
iptables -A FORWARD -p udp --sport 67 --dport 67:68 -j ACCEPT

dhcp3-relay进程信息:

hafw:~# ps fax | grep dhc
 5714 pts/0    D+     0:00                      \_ grep dhc
 5087 ?        Ss     0:04 /usr/sbin/dhcrelay3 -i vlanxxx IP.OF.AD.SERVER

默认配置(/etc/default/dhcp3-relay):

# Defaults for dhcp3-relay initscript
# sourced by /etc/init.d/dhcp3-relay
# installed at /etc/default/dhcp3-relay by the maintainer scripts

#
# This is a POSIX shell fragment
#

# What servers should the DHCP relay forward requests to?
SERVERS="IP.OF.AD.SERVER"

# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
INTERFACES="vlanXXX"

# Additional options that are passed to the DHCP relay daemon?
OPTIONS=""

软件版本:

hafw:~# dpkg -l | grep dhcp3-relay
ii  dhcp3-relay                            3.1.1-6+lenny6           DHCP relay daemon

我已经尝试在继电器配置上执行的操作并没有改变行为:

  • 添加-a附加代理信息的选项
  • 添加-c 20并增加跳数,从默认的(10)到20。无论如何,只有8跳才能到达AD。
  • 添加面向互联网的tun0互联网 VLAN 接口。vlanYYY
  • 让它INTERFACES=空着,这样就没有-i选择了。

我错过了什么吗?

答案1

这看起来像是实用程序本身的设计错误dhcrelay。它只能听播送接口,而 OpenVPN 是一个点对点界面。该-i标志不会改变这一点(它只会减少从一组中选择的接口的数量)播送接口)。

解决方法似乎是dhcrelay在远程 LAN 内的设备上运行,而不是在网关本身上运行。然后,中继的单播流量将通过 OpenVPN 隧道传递到 DHCP 服务器并再次返回。

如果您需要一台小型/便宜的服务器来完成此类任务,我可以推荐运行 Raspbian(伪装的 Debian)的 Raspberry Pi。我在每个远程办公室的一对服务器上运行 DNS。

参考

相关内容