Назад | Перейти на главную страницу

Проблема статической маршрутизации в Ubuntu

Я пытаюсь настроить сервер ubuntu в качестве маршрутизатора. Это моя конфигурация интерфейса (eth2 подключается к моей WAN, eth0 - к моей LAN):

auto eth2
iface eth2 inet static
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
    broadcast 192.168.0.255

auto eth0
iface eth0 inet static
    address 192.168.100.1
    netmask 255.255.255.0

Это информация о роутере:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth2

А это конфигурация dhcp:

subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.101 192.168.100.254;
    option domain-name-servers 201.70.86.133;
    option routers 192.168.100.1;
    authoritative;
}

Затем я подключаю Mac OS X кабелем к eth0. Это конфигурация интерфейса en0:

en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
 ether 00:26:bb:5d:82:b0 
 inet6 fe80::226:bbff:fe5d:82b0%en0 prefixlen 64 scopeid 0x4 
 inet 192.168.100.101 netmask 0xffffff00 broadcast 192.168.100.255
 media: autoselect (100baseTX <full-duplex>)
 status: active

А это таблица маршрутизации:

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.100.1      UGSc          139       32     en0
10.37.129/24       link#8             UC              2        0   vnic1
10.37.129.2        0:1c:42:0:0:9      UHLWI           0      839     lo0
10.37.129.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        4   vnic1
10.211.55/24       link#7             UC              2        0   vnic0
10.211.55.2        0:1c:42:0:0:8      UHLWI           0      840     lo0
10.211.55.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        4   vnic0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              3   507924     lo0
169.254            link#4             UCS             0        0     en0
172.16.42/24       link#10            UC              2        0  vmnet8
172.16.42.1        0:50:56:c0:0:8     UHLWI           0      839     lo0
172.16.42.255      link#10            UHLWbI          1       24  vmnet8
192.168.100        link#4             UC              2        0     en0
192.168.100.1      0:e0:7c:7e:f:99    UHLWI         139        0     en0    777
192.168.100.101    127.0.0.1          UHS             0        0     lo0
192.168.100.255    ff:ff:ff:ff:ff:ff  UHLWbI          0        4     en0
192.168.116        link#9             UC              2        0  vmnet1
192.168.116.1      0:50:56:c0:0:1     UHLWI           0      839     lo0
192.168.116.255    ff:ff:ff:ff:ff:ff  UHLWbI          0        4  vmnet1

Мой net.ipv4.ip_forward настроен, а iptables не имеет определенного правила.

Когда я пингую 192.168.100.1, он работает. Когда я пингую 192.168.0.249, он тоже работает. Однако, когда я пытаюсь пинговать 192.168.0.1, этого не происходит. В этом последнем случае, когда я использую tcpdump, я вижу активность ICMP в eth0, но не вижу активности в eth2.

Есть ли у кого-нибудь способ решить это? Есть ли способ отладить это?

Спасибо,

Можете ли вы пропинговать 192.168.0.1 из вашей системы Ubuntu?

Включена ли пересылка в вашей системе Ubuntu? Тебе нужно net.ipv4.ip_forward включен, если вы хотите пересылать пакеты; это обычно помещается в /etc/sysctl.conf:

net.ipv4.ip_forward = 1

А потом беги sysctl -p.

Вы можете установить это (непостоянно) в командной строке:

sysctl -w net.ipv4.ip_forward=1

У вас есть локальный брандмауэр, предотвращающий пересылку? Проверьте политику по умолчанию для вашей пересылки (или любых конкретных правил в цепочке пересылки).

В /etc/sysctl.conf ищите строку, в которой упоминается net.ipv4.ip_forward. Если он все еще закомментирован, раскомментируйте его и запустите sysctl -p чтобы получить пересылку пакетов. Это должно позволить вам пинговать 192.168.0.1 с 192.168.100.101.

Однако тогда вам придется взглянуть на использование iptables для NAT соединения, поступающего из 192.168.100.0/24 во внешний мир.

Возможно, вы не пересылаете пакеты через интерфейсы? Пытаться

echo 1 > /proc/net/ipv4/ip_forward
echo 1 > /proc/net/ipv6/ip_forward

Если он работает, установите его навсегда с помощью sysctl.conf

Нашел причину.

Мой маршрутизатор WAN не распознал сеть 192.168.100.0, поэтому запрос icmp попал туда, но не смог вернуться.

Изменение информации о маршрутизации в маршрутизаторе WAN устранило проблему.

Спасибо!