summaryrefslogtreecommitdiffstats
path: root/source/n/network-scripts/scripts/rc.ip_forward
blob: 8940dc2cc6c129d7a3f77bd0a7223e88693a7626 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/sh
# /etc/rc.d/rc.ip_forward:  start/stop IP packet forwarding
#
# If you intend to run your Linux box as a router, i.e. as a
# computer that forwards and redistributes network packets, you
# will need to enable IP packet forwarding in your kernel.
#
# To activate IP packet forwarding at boot time, make this
# script executable:  chmod 755 /etc/rc.d/rc.ip_forward
#
# To disable IP packet forwarding at boot time, make this
# script non-executable:  chmod 644 /etc/rc.d/rc.ip_forward

# Start IP packet forwarding:
ip_forward_start() {
  if [ -f /proc/sys/net/ipv4/ip_forward ]; then
    echo "Activating IPv4 packet forwarding."
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # Changing /proc/sys/net/ipv4/ip_forward results in resetting all
    # non-default ipv4 parameters for the interface as mentioned in
    # /usr/src/linux/Documentation/networking/ip-sysctl.txt.  So, we
    # will reapply any ipv4 sysctl parameters now:
    if [ -r /etc/sysctl.conf ]; then
      /bin/grep ipv4 /etc/sysctl.conf | sysctl -p - 1> /dev/null 2> /dev/null
    fi
  fi
  # When using IPv4 packet forwarding, you will also get the
  # rp_filter, which automatically rejects incoming packets if the
  # routing table entry for their source address doesn't match the
  # network interface they're arriving on.  This has security
  # advantages because it prevents the so-called IP spoofing,
  # however it can pose problems if you use asymmetric routing
  # (packets from you to a host take a different path than packets
  # from that host to you) or if you operate a non-routing host
  # which has several IP addresses on different interfaces.  To
  # turn rp_filter off, uncomment the lines below:
  #if [ -r /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  #  echo "Disabling rp_filter."
  #  echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
  #fi
}

# Stop IP packet forwarding:
ip_forward_stop() {
  if [ -f /proc/sys/net/ipv4/ip_forward ]; then
    echo "Disabling IPv4 packet forwarding."
    echo 0 > /proc/sys/net/ipv4/ip_forward
    # Changing /proc/sys/net/ipv4/ip_forward results in resetting all
    # non-default ipv4 parameters for the interface as mentioned in
    # /usr/src/linux/Documentation/networking/ip-sysctl.txt.  So, we
    # will reapply any ipv4 sysctl parameters now:
    if [ -r /etc/sysctl.conf ]; then
      /bin/grep ipv4 /etc/sysctl.conf | sysctl -p - 1> /dev/null 2> /dev/null
    fi
  fi
}

# Restart IP packet forwarding:
ip_forward_restart() {
  ip_forward_stop
  sleep 1
  ip_forward_start
}

case "$1" in
'start')
  ip_forward_start
  ;;
'stop')
  ip_forward_stop
  ;;
'restart')
  ip_forward_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac