我尝试启用IP转发(在enp0s3和tun0接口之间),并在/etc/sysctl.conf写入net.ipv4.ip_forward = 1 。 重新启动后,我有
$ cat /proc/sys/net/ipv4/ip_forward 1
但转发仍然无法正常工作。 我尝试在/etc/sysctl.conf添加net.ipv4.conf.default.forwarding=1 。 现在重新启动后,我有
$ cat /proc/sys/net/ipv4/ip_forward 1 $ cat /proc/sys/net/ipv4/conf/default/forwarding 1 $ cat /proc/sys/net/ipv4/conf/all/forwarding 1 $ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding 0 $ cat /proc/sys/net/ipv4/conf/tun0/forwarding 0
我无法在sysctl.conf启用/proc/sys/net/ipv4/conf/enp0s3/forwarding和/proc/sys/net/ipv4/conf/tun0/forwarding ,因为这些文件在如此早期的启动时间不存在:
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)
, tun0是dynamic接口(可以随时添加和删除)。
如果我手动为enp0s3和tun0启用转发,则转发按预期工作。
那么,如何正确的启用转发接口呢?
PS:内核4.1.15和systemd 226的Gentoo
PPS:如果我以前的记忆服务于我, net.ipv4.ip_forward = 1就足够了。
我终于解决了问题。 我使用systemd(使用networkd),有关ip转发的新特性已经在systemd-221中引入:“IPForwarding =” – 请参阅https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS
从man systemd.network :
[networking]部分选项
…
IPForward =
configurationnetworking接口的IP转发。 如果networking接口上启用的传入数据包将根据路由表转发到其他接口。 采用一个布尔参数,或值为“ipv4”或“ipv6”,它只为指定的地址系列启用IP转发,或者“kernel”,它保留现有的sysctl设置。 这将控制networking接口的net.ipv4.conf..forwarding和net.ipv6.conf..forwarding sysctl选项(有关sysctl选项的详细信息,请参阅ip-sysctl.txt [1])。 默认为“否”。
注意:除非这个选项被打开,或者设置为“kernel”,否则即使在内核中全局地打开了这个接口,也不会在这个接口上完成IP转发,使用net.ipv4.ip_forward和net.ipv4.conf。 all.forwarding和net.ipv6.conf.all.forwarding sysctl选项。
所以现在我使用如下的networking文件启用IP转发(每个接口):
# cat /etc/systemd/network/tun0.network [Match] Name=tun0 [Network] IPForward=ipv4