![通过 DHCP 获取 GRE 隧道的 IP](https://linux22.com/image/710549/%E9%80%9A%E8%BF%87%20DHCP%20%E8%8E%B7%E5%8F%96%20GRE%20%E9%9A%A7%E9%81%93%E7%9A%84%20IP.png)
我需要创建从客户端到服务器的 GRE 隧道。这是我的设置。
设置:
________________________________ _________________________________ ______________________________
|Server | | |Router | | |Client | |
|-------- | |-------- | |-------- |
| wan (244.244.244.1/24) -|------|- wan (244.244.244.20/24) | | |
| | | | | |
| | | lan (192.168.178.0/24) -|------|- lan (192.168.178.22/24) |
| | --------------------------------- | |
| | | |
| to_client (10.10.10.1/24) -|---------------------------------------------|- to_server |
-------------------------------- ------------------------------
它基本上可以工作,但我无法在客户端的“to_server”隧道接口上获取 IP,因为dhclient
不支持这种类型的接口。似乎没有 isc-dhcp 包支持它。我通常使用 isc-dhcp-server 作为 DHCP 服务器,但需要使用 dnsmasq 进行这种特殊设置。
$ dhclient -v to_server
Unsupported device type 778 for "to_server"
是否有其他方法/程序可以从 DHCP 服务器请求 IP
从这里到结尾的附加信息:
服务器和客户端都是运行 debian jessie 的 LXContainers,这些容器的主机是 Ubuntu 16.04。路由器将客户端的条目作为“暴露主机”
奇怪的是,我能够 ping 服务器的隧道接口地址。
$ ping -c3 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=63 time=1.38 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=63 time=0.703 ms
64 bytes from 10.10.10.1: icmp_seq=3 ttl=63 time=0.784 ms
--- 10.10.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.703/0.957/1.386/0.306 ms
ifconfig
服务器(精简到最低限度)
wan Link encap:Ethernet Hardware Adresse d6:d1:57:b5:a9:47
inet Adresse:244.244.244.1 Bcast:0.0.0.0 Maske:255.255.255.0
inet6-Adresse: fe80::d4d1:57ff:feb5:a947/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
to_client Link encap:UNSPEC Hardware Adresse F4-F4-F4-01-30-30-3A-30-00-00-00-00-00-00-00-00
inet Adresse:10.10.10.1 P-z-P:10.10.10.1 Maske:255.255.255.0
UP PUNKTZUPUNKT RUNNING NOARP MTU:1476 Metrik:1
ifconfig
客户端(精简到最少)
lan Link encap:Ethernet Hardware Adresse 82:63:16:cc:12:88
inet Adresse:192.168.178.22 Bcast:0.0.0.0 Maske:255.255.255.0
inet6-Adresse: fe80::8063:16ff:fecc:1288/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
to_server Link encap:UNSPEC Hardware Adresse C0-A8-B2-16-30-30-3A-30-00-00-00-00-00-00-00-00
UP PUNKTZUPUNKT RUNNING NOARP MTU:1476 Metrik:1
隧道接口
$ ip tunnel show to_client
to_client: gre/ip remote 244.244.244.20 local 244.244.244.1 ttl 255
$ ip tunnel show to_server
to_server: gre/ip remote 244.244.244.1 local 192.168.178.22 ttl 255
dnsmasq配置文件
# wan-network
dhcp-range=wan,244.244.244.25,244.244.244.30,2m
# tunnel-network
dhcp-range=to_client,10.10.10.2,10.10.10.10,2m
# netmask /24
dhcp-option=1,255.255.255.0
# this is the router
dhcp-host=9c:c7:a6:XX:XX:XX,244.244.244.20,2m
# disable DNS
port=0
答案1
从输出中可以看出ip tunnel show
,您的隧道类型是gre/ip,所以它是三层隧道。
这意味着您只能发送 IP 数据包,但 BOOTP(DHCP 下的协议)使用该类型的链接上不可用的第 2 层功能(如广播)。
要知道为什么你能 ping 通,你应该检查输出ip route
并“跟踪”路径。请注意,TTL 为 63,因此路径中应该有一个路由器客户到10.10.10.1。