GRE 实验3 固化GRE配置
本文介绍如何使用systemd-networkd固化GRE配置
在GRE实验2之后,我开始实验如何使用systemd-networkd固化GRE配置,原以为是一个很简单的问题,没想到无论如何都无法在systemd-networkd创建的GRE通道中启用ipv6 link-local-address
最后我不得不采用以下方法自己写了一个systemd service来更改systemd-networkd所创建的GRE通道的内核参数,来启用ipv6 link-local-address
systemd-networkd配置
以arch1机为例
/etc/systemd/network/26-gre-arch2.netdev
[NetDev]
Name=gre-arch2
Kind=gre
#MTUBytes=1480
[Tunnel]
Local=10.165.103.239
Remote=10.113.224.163
Key=42
TTL=64
/etc/systemd/network/26-gre-arch2.network
[Match]
Name=gre-arch2
[Network]
LinkLocalAddressing=ipv6
[Link]
Multicast=true # <--- 这个没用
IPv6LinkLocalAddressGenerationMode=eui64 # <--- 这个没用
[Address]
Address=10.0.3.1/30
Peer=10.0.3.2/30
/etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
DHCP=ipv4
Tunnel=gre-arch2 # <--- 加上这个
systemd 自定义service配置
/etc/systemd/system/gre-arch1.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/sysctl -w net.ipv6.conf.gre-arch1.addr_gen_mode=0
[Install]
WantedBy=multi-user.target
[Unit]
Wants=network-online.target
After=network-online.target
总结
- 关键是
net.ipv6.conf.gre-arch1.addr_gen_mode=0这个内核参数,这是我通过sysctl -a|grep gre-arch1比对出来的 - 一个GRE通道跑ipv4/ipv6两种协议真的OK吗?如果这样,为何还有sit等其他协议?
- 在arch-linux 上不要再用rc.local了,也不要再用systemd实现的rc.local,直接写一个自定义service就好
下一步
- 将GRE over IPsec 应用于 我的dn42内部网络
- 上防火墙保护dn42虚拟专用网过来的流量
参考
- https://major.io/p/gre-tunnels-with-systemd-networkd/
- https://unix.stackexchange.com/questions/471824/what-is-the-correct-substitute-for-rc-local-in-systemd-instead-of-re-creating-rc 不要用rc.local,要自己写一个systemd service
- https://wiki.archlinux.org/title/User:Herodotus/Rc-Local-Systemd 不要用rc.local,要自己写一个systemd service