我正在尝试在我的远程外部服务器和本地机器之间建立 IPSEC 隧道。我的远程服务器在数据中心有一个裸露的公共 IP4。我附近的服务器有一个本地 NAT 隐藏的 192.168.xy 地址,但是我已将所有必需的端口和协议转发给它;UDP 500、UDP 4500、ah、esp,以及删除了路由器辅助程序绑定。两者都运行 Debian 9 Stretch。我的路由器很好,已经解决了。远程服务器可以使用 nmap 在 ESP、AH 和 IKE 上查看本地。
在本地,我这样做了(内部 100 范围 IP 已更改)
modprobe dummy
ip link add name dummy0 type dummy
ip address add 100.64.1.1/32 dev dummy0
当我这样做的时候
ifconfig
它显示如下
dummy0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500
inet 100.64.1.1 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 189 bytes 70950 (69.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
当我们访问外部服务器时,
modprobe dummy
它与 lsmod 一起显示:
root@host:~# lsmod | grep dummy
dummy 16384 0
root@host:~#
,并且在执行一组类似的后续命令后,ifconfig 命令没有显示任何虚拟以太网端口。
为什么 dummy0 没有显示?
知道哪里出了问题吗?
[编辑 - 添加于 2018 年 10 月 13 日 22:18 BST] 为了清晰起见,我添加了此图表。这是我要设置的内容:
答案1
最初选择“虚拟”eth适配器的原因如下所述:
https://wiki.strongswan.org/issues/722
“无需创建额外的接口(如 TUN)或别名(如 eth0:1,这是一个老概念)。如果您想在 IPsec 隧道内使用私有 IP 地址,只需使用 ip addr add 将它们添加到现有接口之一(eth0 或 lo)即可”。
因此,我需要将隧道 IP 端点绑定到适配器。我不想将其绑定到 eth0,因为该适配器承载着服务器的公共 IP。将其绑定到 lo 似乎“错误”。所以我最初选择尝试创建 dummy0。
从使用过许多不同发行版和平台的人的经验来看,虚拟接口似乎偶尔不可靠,并且很难在启动时脚本中可靠地启动。这也是我发现的。
https://bugzilla.redhat.com/show_bug.cgi?id=1120823
https://askubuntu.com/questions/994669/why-does-ip-link-add-not-work-in-rc-local
https://unix.stackexchange.com/questions/335284/how-can-we-create-multiple-dummy-interfaces-on-linux
https://community.nethserver.org/t/virtual-network-interface-for-virtual-machines/7728/10
我的解决方案是创建一个 TUN 设备。即使没有数据包通过它,它也可以作为每个端点 IP 地址的可靠绑定点。虽然这仍然不是推荐的做法,但我发现,当你输入
ifconfig
TUN 在系统启动脚本中很容易且可靠地启动。
在我的问题图表中,用 dummy0: 替换 tun0: 以获得可行的解决方案。
使用如下方法:
ip tuntap add name tun0 mode tun
ip link set dev tun0 up
ip address add 100.64.2.1/32 dev tun0
route add -net 100.64.1.0/24 gw 100.64.2.1
使 IP 端点绑定起来。
[编辑 2018/09/17 00:50] Cyrus 邮箱复制现在运行正常。