Làm thế nào để vĩnh viễn cho phép chuyển tiếp ip trong Linux với systemd?


8

Tôi cố gắng kích hoạt chuyển tiếp ip (giữa enp0s3tun0giao diện) và viết net.ipv4.ip_forward = 1vào /etc/sysctl.conf. Sau khi khởi động lại tôi có

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

Nhưng chuyển tiếp vẫn không hoạt động. Tôi cố gắng thêm net.ipv4.conf.default.forwarding=1vào /etc/sysctl.conf. Bây giờ sau khi khởi động lại tôi có

$ 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

Tôi không thể cho phép /proc/sys/net/ipv4/conf/enp0s3/forwarding/proc/sys/net/ipv4/conf/tun0/forwardingtrong sysctl.confvì những tập tin này không tồn tại ở thời gian khởi động sớm như vậy:

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)

, hơn cả tun0là giao diện động (có thể được thêm và xóa bất cứ lúc nào).

Nếu tôi tự kích hoạt chuyển tiếp cho enp0s3tun0sau đó chuyển tiếp hoạt động như mong đợi.

Vì vậy, làm thế nào để kích hoạt chuyển tiếp cho giao diện?

PS: Gentoo với kernel 4.1.15 và systemd 226

PPS: nếu bộ nhớ của tôi phục vụ tôi một thời gian trước net.ipv4.ip_forward = 1là đủ.

Câu trả lời:


3

Cuối cùng tôi cũng giải quyết được vấn đề. Tôi sử dụng systemd (với networkd) và tính năng mới về chuyển tiếp ip đã được giới thiệu trong systemd-221: "IPForwarding =" - xem https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/

Từ man systemd.network:

[MẠNG] TÙY CHỌN PHẦN

...

IPForward =

Định cấu hình chuyển tiếp IP cho giao diện mạng. Nếu kích hoạt các gói đến trên giao diện mạng sẽ được chuyển tiếp đến các giao diện khác theo bảng định tuyến. Có một đối số boolean hoặc các giá trị "ipv4" hoặc "ipv6", chỉ cho phép chuyển tiếp IP cho họ địa chỉ được chỉ định hoặc "kernel", duy trì cài đặt sysctl hiện có. Điều này kiểm soát các tùy chọn net.ipv4.conf..forwarding và net.ipv6.conf..forwarding của giao diện mạng (xem ip-sysctl.txt [1] để biết chi tiết về các tùy chọn sysctl). Mặc định là "không".

Lưu ý: trừ khi tùy chọn này được bật hoặc được đặt thành "kernel", không có chuyển tiếp IP nào được thực hiện trên giao diện này, ngay cả khi điều này được bật trên toàn cầu trong kernel, với net.ipv4.ip_forward, net.ipv4.conf. all.forwarding và net.ipv6.conf.all.forwarding tùy chọn sysctl.

Vì vậy, bây giờ tôi sử dụng tệp mạng như sau để bật chuyển tiếp ip (trên mỗi giao diện):

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

[Network]
IPForward=ipv4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.