Моя машина имеет два сетевых интерфейса, каждый соединен (eth0) проводом, и другой является беспроводной связью (wlan0). Проводной не может соединиться ни с каким внешним сервером NTP, потому что существует брандмауэр снаружи. Беспроводная связь у каждого нет такого ограничения.
Поэтому я хочу направить весь трафик NTP к wlan0. Как я знаю, трафик NTP проходят порт UDP 123. То, что я сделал, описано ниже.
$ sudo echo "201 ntp.out" >> /etc/iproute2/rt_tables
$ sudo ip route add default via 100.75.0.1 dev wlan0 table ntp.out
$ sudo sysctl -w net.ipv4.tcp_fwmark_accept=1
$ sudo iptables -t mangle -I PREROUTING -p udp --dport 123 -j MARK --set-mark 0xfefa
$ sudo iptables -t mangle -I OUTPUT -p udp --sport 123 -j MARK --set-mark 0xfefa
$ sudo ip rule add fwmark 0xfefa lookup ntp.out
Однако это не работает. Я использовал Wireshark для отслеживания пакетов UDP:123 и нашел, что нет никакой метки ''fefa'' в пакетах.
BTW, я установил сеть ipv4.tcp_fwmark_accept, а не сеть ipv4.udp_fwmark_accept, потому что нет никакой определенной сети ipv4.udp_fwmark_accept. Я также пытался отметить пакеты TCP, но все еще не мог найти метку в тех пакетах.
Кто-либо мог помочь мне решить проблему? Я использую Ubuntu 14.04 LTS.
Я думаю, что нахожу ошибку. В не исходный порт 123
затем место назначения
Изменение
sudo iptables -t mangle -I OUTPUT -p udp --sport 123 -j MARK --set-mark 0xfefa
к
sudo iptables -t mangle -I OUTPUT -p udp --dport 123 -j MARK --set-mark 0xfefa
Также копия все записи кроме записи шлюза по умолчанию от основной таблицы
sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table ntp.out $ROUTE; done