Uns*_*ced 9 linux-networking linux-kernel systemd
我尝试启用IP转发(间enp0s3
和tun0
接口),并写net.ipv4.ip_forward = 1
在/etc/sysctl.conf
。重启后我有
$ cat /proc/sys/net/ipv4/ip_forward
1
Run Code Online (Sandbox Code Playgroud)
但是转发还是不行。我尝试添加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
Run Code Online (Sandbox Code Playgroud)
我无法启用/proc/sys/net/ipv4/conf/enp0s3/forwarding
和输入/proc/sys/net/ipv4/conf/tun0/forwarding
,sysctl.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)
Run Code Online (Sandbox Code Playgroud)
,更多的tun0
是动态接口(可以随时添加和删除)。
如果我手动启用转发enp0s3
,tun0
然后转发按预期工作。
那么,如何正确开启接口转发呢?
PS:Gentoo 内核 4.1.15 和 systemd 226
PPS:如果我没记错的话,前段时间net.ipv4.ip_forward = 1
就够了。
我终于解决了问题。我使用 systemd(带有 networkd)并且 systemd-221 中引入了关于 ip 转发的新功能:“IPForwarding=” - 见https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS
来自man systemd.network
:
[网络] 部分选项
...
IP转发=
为网络接口配置 IP 转发。如果启用,网络接口上的传入数据包将根据路由表转发到其他接口。采用布尔参数,或值“ipv4”或“ipv6”,仅启用指定地址系列的 IP 转发,或“内核”,保留现有的 sysctl 设置。这控制了网络接口的 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 选项。
所以现在我使用如下的网络文件来启用 ip 转发(每个接口):
# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0
[Network]
IPForward=ipv4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19663 次 |
最近记录: |