Skip to main content

networking - How to make Apache output packets through a certain network interface when connected to VPN?



I have an apache server that works perfect until I connect to VPN and then all connections to server time out.



Now to my understanding the issue is tun0 becomes the default output interface hence apache gets confused as how to send packets out, so I tried to fix it using control groups by marking packets going out from apache and redirecting them through eth0 as described in this SU answer, but it doesn't work anymore after I upgraded my Ubuntu OS to version 16.04. This is my network diagram:




enter image description here



And here's my network details:



me@mypc:~$ ip route list
0.0.0.0/1 via 10.132.1.5 dev tun0
default via 192.168.0.1 dev eth0 proto static metric 100
10.132.1.1 via 10.132.1.5 dev tun0
10.132.1.5 dev tun0 proto kernel scope link src 10.132.1.6
123.4.5.6 via 192.168.0.1 dev eth0

234.5.6.7 via 192.168.0.1 dev eth0
128.0.0.0/1 via 10.132.1.5 dev tun0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.6 metric 100

me@mypc:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:cc:a9:b3:c9:41
inet addr:192.168.0.6 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:864897 errors:0 dropped:0 overruns:0 frame:0

TX packets:467142 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1088053099 (1.0 GB) TX bytes:220201868 (220.2 MB)
Interrupt:17

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
...

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.132.1.6 P-t-P:10.132.1.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:46622 errors:0 dropped:0 overruns:0 frame:0
TX packets:14950 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:60587170 (60.5 MB) TX bytes:1396546 (1.3 MB)


I've done further testing and discovered that if I add this routing rule:




sudo route add -host 123.4.5.6 gw 192.168.0.1


I become able to connect to the server from devices connected to my router using the router ip 123.4.5.6 but not from any other ip address.



And after setting up the control groups on apache and trying the following command:



sudo cgexec -g net_cls:novpn wget http://www.whatsmyip.org/



and checking the ip in the downloaded webpage it would be my router ip 123.4.5.6 and not my vpn ip 10.132.1.6.



So I guess the control groups solution works somehow but not with apache and the incoming packets are being received successfully by apache but nothing is going out.



How can I configure apache to use eth0 to output packets instead of tun0?


Answer



So you need both default gateways; then the way to do this then is with route rules:



1) Add a secondary IP to eth0 - ie 192.168.1.7 and restart apache (sounds like your config is listen 0.0.0.0:80 so you'll just need to restart apache to get it to listen on the new IP.




2) Change the Nat rules on your router to foward traffic to this IP:



3) Create a new default route in a secondary route table lets name the table 'apache':



echo "1 apache" >> /etc/iproute2/rt_tables


4) Add a default route to this table via your local router.



ip route add default via 192.168.0.1 dev eth0 table apache



5) Finally you need a rule to define which traffic should use the apache route table.



ip rule add from 192.168.0.7 table apache


192.168.0.7 is a secondary IP and Apache is the only process using it this rule should only match the traffic leaving apache in response to web requests. This will ensure that only that specific traffic will be use the new route table and it won't mess with your VPN traffic or its current routing behaviour.



please note that the ip commands won't persist after reboot. To make them persistent add them to your interface up scripts to make run every time your laptop reboots.




P.S Leaving my old answer and did this as a new answer as this is very different solution.


Comments

Popular posts from this blog

linux - iDRAC6 Virtual Media native library cannot be loaded

When attempting to mount Virtual Media on a iDRAC6 IP KVM session I get the following error: I'm using Ubuntu 9.04 and: $ javaws -version Java(TM) Web Start 1.6.0_16 $ uname -a Linux aud22419-linux 2.6.28-15-generic #51-Ubuntu SMP Mon Aug 31 13:39:06 UTC 2009 x86_64 GNU/Linux $ firefox -version Mozilla Firefox 3.0.14, Copyright (c) 1998 - 2009 mozilla.org On Windows + IE it (unsurprisingly) works. I've just gotten off the phone with the Dell tech support and I was told it is known to work on Linux + Firefox, albeit Ubuntu is not supported (by Dell, that is). Has anyone out there managed to mount virtual media in the same scenario?

hp proliant - Smart Array P822 with HBA Mode?

We get an HP DL360 G8 with an Smart Array P822 controller. On that controller will come a HP StorageWorks D2700 . Does anybody know, that it is possible to run the Smart Array P822 in HBA mode? I found only information about the P410i, who can run HBA. If this is not supported, what you think about the LSI 9207-8e controller? Will this fit good in that setup? The Hardware we get is used but all original from HP. The StorageWorks has 25 x 900 GB SAS 10K disks. Because the disks are not new I would like to use only 22 for raid6, and the rest for spare (I need to see if the disk count is optimal or not for zfs). It would be nice if I'm not stick to SAS in future. As OS I would like to install debian stretch with zfs 0.71 as file system and software raid. I have see that hp has an page for debian to. I would like to use hba mode because it is recommend, that zfs know at most as possible about the disk, and I'm independent from the raid controller. For us zfs have many benefits,

apache 2.2 - Server Potentially Compromised -- c99madshell

So, low and behold, a legacy site we've been hosting for a client had a version of FCKEditor that allowed someone to upload the dreaded c99madshell exploit onto our web host. I'm not a big security buff -- frankly I'm just a dev currently responsible for S/A duties due to a loss of personnel. Accordingly, I'd love any help you server-faulters could provide in assessing the damage from the exploit. To give you a bit of information: The file was uploaded into a directory within the webroot, "/_img/fck_uploads/File/". The Apache user and group are restricted such that they can't log in and don't have permissions outside of the directory from which we serve sites. All the files had 770 permissions (user rwx, group rwx, other none) -- something I wanted to fix but was told to hold off on as it wasn't "high priority" (hopefully this changes that). So it seems the hackers could've easily executed the script. Now I wasn't able