如何使用systemd在Linux中适当地永久启用IP转发?


8

我尝试启用IP转发(间enp0s3tun0接口),并写net.ipv4.ip_forward = 1/etc/sysctl.conf。重新启动后,我有

$ cat /proc/sys/net/ipv4/ip_forward
1

但是转发仍然无法正常工作。我尝试添加net.ipv4.conf.default.forwarding=1/etc/sysctl.conf。现在重启后

$ 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

我不能启用/proc/sys/net/ipv4/conf/enp0s3/forwarding,并/proc/sys/net/ipv4/conf/tun0/forwardingsysctl.conf因为这些文件不存在于这样的早期启动时间:

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动态界面(可以随时添加和删除)。

如果我手动启用转发enp0s3tun0然后转发按预期工作。

那么,如何正确启用接口转发?

PS:Gentoo带有内核4.1.15和systemd 226

PPS:如果我的记忆在前一段时间为我服务,net.ipv4.ip_forward = 1就足够了。

Answers:


3

我终于解决了问题。我使用systemd(与网络连接),并且在systemd-221中引入了有关ip转发的新功能:“ IPForwarding =“-参见https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

来自man systemd.network

[网络]部分选项

...

IPForward =

为网络接口配置IP转发。如果启用,则网络接口上的传入数据包将根据路由表转发到其他接口。采用布尔参数或值“ ipv4”或“ ipv6”(仅对指定的地址系列或“内核”启用IP转发,该值保留现有sysctl设置)。这将控制网络接口的net.ipv4.conf..forwarding和net.ipv6.conf..forwarding sysctl选项(有关sysctl选项的详细信息,请参阅ip-sysctl.txt [1])。默认为“否”。

注意:除非打开此选项或将其设置为“内核”,否则即使在内核中使用net.ipv4.ip_forward,net.ipv4.conf全局启用了该接口,也不会在该接口上进行IP转发。 all.forwarding和net.ipv6.conf.all.forwarding sysctl选项。

所以现在我使用如下所示的网络文件来启用IP转发(每个接口):

# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0

[Network]
IPForward=ipv4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.