[server] systemd를 사용하여 Linux에서 IP 전달을 올바르게 영구적으로 활성화하는 방법은 무엇입니까?

내가 전달 (사이의 IP 수 있도록 노력 enp0s3하고 tun0인터페이스)와 쓰기 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동적 인터페이스입니다 (언제든지 추가하거나 제거 할 수 있음).

I를 수동으로 전달 사용하는 경우 enp0s3tun0다음 예상대로 작품을 전달.

그렇다면 인터페이스를 올바르게 전달하는 방법은 무엇입니까?

PS : 젠투 커널 4.1.15 및 시스템 226

PPS : 내 기억이 얼마 전에 나에게 봉사한다면 net.ipv4.ip_forward = 1충분했습니다.



답변

마침내 문제를 해결합니다. systemd (네트워크로)를 사용하고 ip 전달에 관한 새로운 기능이 systemd-221에 도입되었습니다 : “IPForwarding =”-https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS 참조

보낸 사람 man systemd.network:

[네트워크] 섹션 옵션

IPForward =

네트워크 인터페이스에 대한 IP 전달을 구성합니다. 활성화 된 경우 네트워크 인터페이스에서 들어오는 패킷이 라우팅 테이블에 따라 다른 인터페이스로 전달됩니다. 부울 인수 또는 지정된 주소 제품군에 대해서만 IP 전달을 가능하게하는 “ipv4″또는 “ipv6″값 또는 기존 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


답변